我有.DLL和.h文件。我正在使用c#,但.DLL是用C ++编写的。我在调用.DLL中的某些函数时遇到问题。当我需要调用其中定义了类型的函数时,问题就来了。例如,包含.DLL是一个.h文件,它的类型定义如下:
struct device_info {
HANDLE dev_handle; // valid open handle or NULL
wchar_t* product_string; // malloc'd string or NULL
wchar_t* serial_string; // malloc'd string or NULL
};
typedef struct device_info *PDEV_INFO;
我试着用它运行并创建了一个类似的结构:
[StructLayout(LayoutKind.Sequential)] public struct PDEV_INFO
{
unsafe void* dev_handle;
unsafe char* product_string;
unsafe char* serial_string;
}
我的程序崩溃我尝试使用任何这些类型。我如何在C#中定义这些类型,或者如何从.h文件中引用类型?更好的是.DLL中某处定义的类型,我只是不知道。感谢。
答案 0 :(得分:3)
尝试使用IntPtr而不是指针。 IntPtr是为编组设计的,c#指针不是。 此外,您可能希望阅读字符串编组。你真的不需要自己这样做。
尝试将您的类型声明为:
[StructLayout(LayoutKind.Sequential)]
public struct PDEV_INFO
{
IntPtr dev_handle;
[MarshalAs(UnmanagedType.LPWStr)]
String product_string;
[MarshalAs(UnmanagedType.LPWStr)]
String serial_string;
}