将 C++ 数据类型编组为 C#
Posted
技术标签:
【中文标题】将 C++ 数据类型编组为 C#【英文标题】:Marshalling C++ Data Type to C# 【发布时间】:2014-06-04 03:08:45 【问题描述】:请告诉我区别
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# 数据类型,哪些数据类型更适合编组的数据类型?
任何建议和答案都会非常有帮助 谢谢
【问题讨论】:
你需要了解什么是 C++ 中的指针(* 用于声明指针) 哦,符号的名字是指针,我明白了,但是双指针(**)呢?这有相同的含义吗?我可以在c#中使用指针吗?? 【参考方案1】:单*是一个指针,它表示一个变量的地址。 Double ** 是指向另一个指针的指针。 嗯,这是 C++ 的基本概念。如果您想了解更多信息,请阅读一本好的教科书。
对于您的问题,C# 可以使用指针。但它会让你的程序变成“不安全的代码”。 如果您从未听说过,请搜索“不安全代码”以获取更多信息。
因此,C# 提供了 IntPtr 来访问使用指针的 C++ 库。 IntPtr 是一种变量,意思是“我是一个指针”。 它可以解决大多数单 * 指针的情况。 但是,您可能需要 C# 的指针来解决双 ** 指针。 您可以参考this thread获取*和**指针的解决方案。
【讨论】:
好的,感谢我正在寻找的参考,但指针符号在搜索引擎中类似于 null :( 无论如何感谢您的回答 :) 当然,在大多数情况下,Google 不会识别符号。使用“指针”和“双指针”替换搜索关键字中的 * 和 **。以上是关于将 C++ 数据类型编组为 C#的主要内容,如果未能解决你的问题,请参考以下文章
在 c# 和 c++ 之间将 double 类型的二维多维数组作为输入和输出的 pinvoke 编组