将C ++数据类型编组为C#

时间:2014-06-04 03:08:46

标签: c# c++ marshalling

有人请告诉我差异

int* variable
int * variable
int *variable
void* variable
void** variable
char*
short variable //(C++) in c# this type more suitable with? short type too??

我有.h,.lib和.dll文件,但我不知道lib和dll文件的内容
示例:
这个来自头文件

#ifdef cpp_EXPORTS
#define cpp_API __declspec(dllexport)
#else
#define cpp_API __declspec(dllimport)
#endif
extern "C" 
{
cpp_API char* cpp_Version(void); // What should i use better for(void) and what is the meaning char*
cpp_API int cpp_AddUser(void* User, double Acc, double Limit, int* NewId); //example for void* variable and int* variable
cpp_API int cpp_AddModifyBilling(int Act, int Level, wchar_t* BillingCo, wchar_t* Desc, int * BillingId); //example for int * variable
cpp_API int cpp_DeleteBilling(int Act, wchar_t* Code1, wchar_t* Code2, wchar_t* Code3, int Billable, int *CombId); //example for int *variable
cpp_API int cpp_GetUser(int UserId, void** UserInfo); //example for void** variable

...
}

#pragma pack(1) //and is the meaning about this one ??

问题:
1.是否*(符号)用于其他类型的数据中具有相同含义以及类型和变量之间位置的含义是什么?
2.如果我想对C#数据类型进行编组,哪种数据类型更适合将在马歇尔中的数据类型?

任何建议和答案都会非常有帮助 谢谢

1 个答案:

答案 0 :(得分:1)

Single *是指针,它表示变量的地址。 Double **是一个指向另一个指针的指针。 嗯,这是C ++的基本概念。如果你想了解更多,请阅读一本好的教科书。

对于你的问题,C#可以使用指针。但它会使你的程序成为"不安全的代码"。 请谷歌"不安全的代码"如果您从未听说过,请提供更多信息。

因此,C#提供IntPtr来访问使用指针的C ++库。 IntPtr是一种变量,意味着"我是一个指针"。 它可以解决大多数单*指针的情况。 但是,您可能需要C#的指针来解决双**指针。 您可以参考this thread获取*和**指针的解决方案。