嘿伙计们,我正在用C ++创建一个DLL,我希望它可以从.NET应用程序(C#和VB.NET)中使用。我一直在互联网上搜索提示,到目前为止我发现的建议:
假设typedef unsigned char byte;
这是一个压缩功能。它期望的输入是输入数据(传递为byte *),输入数据的大小(作为int传递),指向存储压缩大小的变量的指针(作为int *传递),以及一个字符串in如果需要,可以存储哪些错误消息(作为char *传递)。函数malloc是输出缓冲区,写入输出,并返回一个字节*,调用代码在使用缓冲区时应该释放缓冲区。如果发生错误,错误消息将被绑定到错误字符串中,并返回NULL指针。
我目前的设置是否正确,还是我需要进行一些其他修改才能从.NET调用?
答案 0 :(得分:2)
托管代码无法释放内存,因此无法访问内置于CRT中的分配器。您可以使用CoTaskMemAlloc()来分配缓冲区,托管代码可以调用Marshal.FreeCoTaskMem()。您必须将缓冲区指针参数声明为“ref IntPtr”或将函数的返回类型声明为IntPtr。这为托管代码提供了将其转换为托管字节数组的麻烦。
这不是很好,当您在C ++ / CLI中编写代码或编写COM服务器时,这些问题就会消失。