C#调用C++DLL中 HANDLE *phCard怎么处理
C++原函数声明是
DWORD _stdcall HSListReaders
(
OUT LPSTR pszReaderName,
IN OUT DWORD *pdwReaderNameLen,
OUT DWORD *pdwReaderNum
)
参数说明:
pszReaderName: 输出,多字符串,所有读写器的名称,如果该值为NULL, 由dwReaderNameLen返回读写器名字的长度。
pdwReaderNameLen: 返回读写器名字的长度。输入:缓冲区的长度,输出:读写器名称的长度。
pdwReaderNum: 输出,返回读写器的总个数。
DWORD _stdcall HSConnectDev
(
IN LPCSTR szDevName,
OUT HANDLE *phCard
)
参数说明:
szDevName: 输入,可用设备名。
phCard: 输出,设备的操作句柄。
[DllImport("GEA00001.dll", EntryPoint = "HSListReaders", CharSet = CharSet.Ansi)]
public static extern uint HSListReaders(System.Text.StringBuilder p, ref uint pdwReaderNameLen, ref uint pdwReaderNum);
[DllImport("GEA00001.dll", EntryPoint = "HSConnectDev", CharSet = CharSet.Auto)]
public static extern uint HSConnectDev(String szDevName, ref IntPtr hCard);
调用时这样的,设备名正常输出,但是获取设备的操作句柄,一直都是0,请大家帮忙
uint pdwReaderNum=0;
uint pdwReaderNameLen=0;
IntPtr hCard = IntPtr.Zero;
Class1.HSListReaders(null, ref pdwReaderNameLen, ref pdwReaderNum);
System.Text.StringBuilder pszReaderName = new System.Text.StringBuilder((int)pdwReaderNameLen);
Class1.HSListReaders(pszReaderName, ref pdwReaderNameLen, ref pdwReaderNum);
String szDevName = pszReaderName.ToString();
Class1.HSConnectDev(szDevName, ref hCard);
DWORD _stdcall HSListReaders
(
OUT LPSTR pszReaderName,
IN OUT DWORD *pdwReaderNameLen,
OUT DWORD *pdwReaderNum
)
参数说明:
pszReaderName: 输出,多字符串,所有读写器的名称,如果该值为NULL, 由dwReaderNameLen返回读写器名字的长度。
pdwReaderNameLen: 返回读写器名字的长度。输入:缓冲区的长度,输出:读写器名称的长度。
pdwReaderNum: 输出,返回读写器的总个数。
DWORD _stdcall HSConnectDev
(
IN LPCSTR szDevName,
OUT HANDLE *phCard
)
参数说明:
szDevName: 输入,可用设备名。
phCard: 输出,设备的操作句柄。
[DllImport("GEA00001.dll", EntryPoint = "HSListReaders", CharSet = CharSet.Ansi)]
public static extern uint HSListReaders(System.Text.StringBuilder p, ref uint pdwReaderNameLen, ref uint pdwReaderNum);
[DllImport("GEA00001.dll", EntryPoint = "HSConnectDev", CharSet = CharSet.Auto)]
public static extern uint HSConnectDev(String szDevName, ref IntPtr hCard);
调用时这样的,设备名正常输出,但是获取设备的操作句柄,一直都是0,请大家帮忙
uint pdwReaderNum=0;
uint pdwReaderNameLen=0;
IntPtr hCard = IntPtr.Zero;
Class1.HSListReaders(null, ref pdwReaderNameLen, ref pdwReaderNum);
System.Text.StringBuilder pszReaderName = new System.Text.StringBuilder((int)pdwReaderNameLen);
Class1.HSListReaders(pszReaderName, ref pdwReaderNameLen, ref pdwReaderNum);
String szDevName = pszReaderName.ToString();
Class1.HSConnectDev(szDevName, ref hCard);
...全文
相关推荐
c#调用c++DLL,dll有二维数组
标题中的“c#调用c++DLL,dll有二维数组”意味着我们将在C++的DLL中定义一个二维数组,然后在C#中调用该函数并处理这个数组。
C#调用C++ Dll关于结构体数组引用的传递及解析使用的展示代码
当C#需要调用C++开发的动态链接库(DLL)时,涉及到的数据类型转换、尤其是复杂类型如结构体的处理,往往会成为一大挑战。
C#调用C++生成的DLL,并返回结构体引用或者结构体指针多个值
**错误处理和内存管理** 调用DLL函数时,务必考虑错误处理和内存管理。如果DLL函数返回错误,C#代码需要能够适当地处理异常。
C# 调用C++ DLL的类型转换
在C#中调用C++编写的动态链接库(DLL)时,类型转换是至关重要的,因为两种语言的数据类型并不完全对应。以下是一些主要的数据类型转换方式:1. 整型转换: - `c++: HANDLE(v
c#中如何调用外部DLL
需要注意的是,在实际开发过程中,还需要注意一些细节问题,比如确保DLL和调用它的程序位于同一目录下或正确设置路径,以及处理可能出现的异常情况等。


