Hi All,
I want to implement an external C++ library into my application. I will write it in XSharp core dialect as a WPF Windows app. What a function to do from this library you would recommend?
Juraj
How to use External C++ dll
How to use External C++ dll
Hi Juray,
the C++ library comes in form of a DLL? And do you need only functions or also classes?
Do you have tried to ask the vendor if he has also C# bindings?
Wolfgang
the C++ library comes in form of a DLL? And do you need only functions or also classes?
Do you have tried to ask the vendor if he has also C# bindings?
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
How to use External C++ dll
Hi Juraj,
the same rules apply for X# as for C#:
https://stackoverflow.com/questions/772 ... in-c-sharp
https://stackoverflow.com/questions/295 ... sharp?rq=1
Basically it is the same situation as in VO (but since VO is written in C++, there is some documented but really complicated way to make it work nevertheless - please see "Using C++ DLLs" in the "How To" section of the VO help).
Wolfgang
the same rules apply for X# as for C#:
https://stackoverflow.com/questions/772 ... in-c-sharp
https://stackoverflow.com/questions/295 ... sharp?rq=1
Basically it is the same situation as in VO (but since VO is written in C++, there is some documented but really complicated way to make it work nevertheless - please see "Using C++ DLLs" in the "How To" section of the VO help).
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
How to use External C++ dll
Hi Wolfgang,
Thank you for your response. From 1.1.2020 on-line cash register must be used in Slovakia. The EFox (on line cash register) manufacturer also ships this library with the hardware. I do not have more information from the manufacturer.
In VO or Vulcan I use:
_DLL FUNCTION BeginSaleReceipt(nHandle AS INT, cTransactionID AS STRING) AS INT
PASCAL:EFoxComm.BeginSaleReceipt ANSI
I wanted to see if there was another, better way.
Juraj
Thank you for your response. From 1.1.2020 on-line cash register must be used in Slovakia. The EFox (on line cash register) manufacturer also ships this library with the hardware. I do not have more information from the manufacturer.
In VO or Vulcan I use:
_DLL FUNCTION BeginSaleReceipt(nHandle AS INT, cTransactionID AS STRING) AS INT
PASCAL:EFoxComm.BeginSaleReceipt ANSI
I wanted to see if there was another, better way.
Juraj
How to use External C++ dll
Juraj,
Try this
STATIC CLASS EFox
[DllImport("EFoxComm.dll")];
STATIC METHOD BeginSaleReceipt(nHandle AS INT, cTransactionID AS STRING) AS INT
END CLASS
You can then call the function with EFox.BeginSaleReceipt(...)
See also https://github.com/X-Sharp/XSharpPublic ... /Win32.prg for an example
Robert
Try this
STATIC CLASS EFox
[DllImport("EFoxComm.dll")];
STATIC METHOD BeginSaleReceipt(nHandle AS INT, cTransactionID AS STRING) AS INT
END CLASS
You can then call the function with EFox.BeginSaleReceipt(...)
See also https://github.com/X-Sharp/XSharpPublic ... /Win32.prg for an example
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
How to use External C++ dll
Hi Robert,
Thank for for your response.
I use this code:
USING System.Runtime.InteropServices
STATIC CLASS EFox
//
[DllImport("eKasaEFoxComm.dll"];
STATIC METHOD Abort(nHandle AS INT) AS INT
//
[DllImport("eKasaEFoxComm.dll"];
STATIC METHOD BeginSaleReceipt(nHandle AS INT, cTransactionID AS STRING) AS INT
//
END CLASS
Result:
Error XS9002 Parser: unexpected input 'STATIC CLASS EFoxCRLF //[DllImport("eKasaEFoxComm.dll"]'
Juraj
Thank for for your response.
I use this code:
USING System.Runtime.InteropServices
STATIC CLASS EFox
//
[DllImport("eKasaEFoxComm.dll"];
STATIC METHOD Abort(nHandle AS INT) AS INT
//
[DllImport("eKasaEFoxComm.dll"];
STATIC METHOD BeginSaleReceipt(nHandle AS INT, cTransactionID AS STRING) AS INT
//
END CLASS
Result:
Error XS9002 Parser: unexpected input 'STATIC CLASS EFoxCRLF //[DllImport("eKasaEFoxComm.dll"]'
Juraj
How to use External C++ dll
Hi Robert
in line
[DllImport("EFoxComm.dll"];
the right parenthesis was missing. My fault that I noticed it later
Juraj
in line
[DllImport("EFoxComm.dll"];
the right parenthesis was missing. My fault that I noticed it later
Juraj
How to use External C++ dll
Hi Robert
I have not been able to call a function via a CLASS, even with your examples...
However I have been able to call many functions to an external win32 DLL via the following code:
//_________________
[DllImport("Randomad32.dll")];
_DLL FUNCTION MersenneRandomInitD ( IsEED AS INT ) AS VOID PASCAL:Randomad32.MersenneRandomInitD
// Must be call before MersenneIRandomD() function
// Must be called (ONLY 1 TIME) before you use the MersenneIRandomD() function, if this last function is
//used many times in a loop. Otherwise there is very bad perfomance in speed.
[DllImport("Randomad32.dll")];
_DLL FUNCTION ReadTSC() AS INT PASCAL:Randomad32.ReadTSC
// This function will generate the seed
[DllImport("Randomad32.dll")];
_DLL FUNCTION MersenneIRandomD( iMin AS INT , iMax AS INT ) AS INT PASCAL:Randomad32.MersenneIRandomD
//This function to generate a number between Min and Max, it can be called many times into your own class or function
//The DLL can be found here:
//https://www.rayonline.com/jrinfo/downlo ... omad32.dll
//______________________________
Hope this will help somebody
Best regards
Jean Raymond
https://rayonline.com/
I have not been able to call a function via a CLASS, even with your examples...
However I have been able to call many functions to an external win32 DLL via the following code:
//_________________
[DllImport("Randomad32.dll")];
_DLL FUNCTION MersenneRandomInitD ( IsEED AS INT ) AS VOID PASCAL:Randomad32.MersenneRandomInitD
// Must be call before MersenneIRandomD() function
// Must be called (ONLY 1 TIME) before you use the MersenneIRandomD() function, if this last function is
//used many times in a loop. Otherwise there is very bad perfomance in speed.
[DllImport("Randomad32.dll")];
_DLL FUNCTION ReadTSC() AS INT PASCAL:Randomad32.ReadTSC
// This function will generate the seed
[DllImport("Randomad32.dll")];
_DLL FUNCTION MersenneIRandomD( iMin AS INT , iMax AS INT ) AS INT PASCAL:Randomad32.MersenneIRandomD
//This function to generate a number between Min and Max, it can be called many times into your own class or function
//The DLL can be found here:
//https://www.rayonline.com/jrinfo/downlo ... omad32.dll
//______________________________
Hope this will help somebody
Best regards
Jean Raymond
https://rayonline.com/
How to use External C++ dll
Jean Raymond,
The combination of DllImport and _DLL FUNCTION is not needed.
_DLL FUNCTION will automacally generate the DllImport attribute
Below is an example of DllImport in the XSharp.VO DLL.
As you can see I am declaring strings with AS STRING and I am adding the CharSet attribute so the Marshalling code in the .Net runtime know that string needs to be converted from Unicode to Ansi
Robert
The combination of DllImport and _DLL FUNCTION is not needed.
_DLL FUNCTION will automacally generate the DllImport attribute
Below is an example of DllImport in the XSharp.VO DLL.
As you can see I am declaring strings with AS STRING and I am adding the CharSet attribute so the Marshalling code in the .Net runtime know that string needs to be converted from Unicode to Ansi
Code: Select all
STATIC CLASS XSharp.Win32
CONST SW_SHOWNORMAL := 1 AS LONG
[DllImport("kernel32.dll", CharSet := CharSet.Ansi )];
STATIC METHOD WinExec(lpCmdLine AS STRING, uCmdShow AS DWORD) AS DWORD
[DllImport("kernel32.dll" )];
STATIC METHOD GetCurrentProcess() AS IntPtr
[DllImport("kernel32.dll" )];
STATIC METHOD VirtualQueryEx(hProcess AS IntPtr, lpAddress AS IntPtr, ;
lpBuffer AS _WINMEMORY_BASIC_INFORMATION, dwLength AS DWORD) AS DWORD PASCAL
END CLASS
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu