定义C++;输入C#
我有一个.DLL和一个.h文件。我使用的是C++,但是.dll是用C++编写的。我在调用.DLL中的某些函数时遇到了问题。当我需要调用定义了类型的函数时,问题就出现了。例如,include with the.DLL是一个.h文件,其类型定义如下:定义C++;输入C#,c#,c++,dll,C#,C++,Dll,我有一个.DLL和一个.h文件。我使用的是C++,但是.dll是用C++编写的。我在调用.DLL中的某些函数时遇到了问题。当我需要调用定义了类型的函数时,问题就出现了。例如,include with the.DLL是一个.h文件,其类型定义如下: struct device_info { HANDLE dev_handle; // valid open handle or NULL wchar_t* product_string; // malloc'd string or N
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中的某个地方定义类型,我只是不知道。谢谢。试试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;
}
你是如何使用这些类型的?比如:[StructLayout(LayoutKind.Sequential)]public struct PDEV_INFO{unsafe IntPtr*dev_handle;unsafe IntPtr*product_string;unsafe IntPtr*serial_string;}不,没有指针。指针是非常非c的-你应该(几乎)总是避免它们。我更新了我的答案给你一个想法。