在C#中定义C ++类型

时间:2010-02-08 18:17:00

标签: c# c++ dll

我有.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中某处定义的类型,我只是不知道。感谢。

1 个答案:

答案 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;

}