有关创建要从.NET使用的C ++ DLL的提示

时间:2010-07-02 14:22:03

标签: .net c++ dll

嘿伙计们,我正在用C ++创建一个DLL,我希望它可以从.NET应用程序(C#和VB.NET)中使用。我一直在互联网上搜索提示,到目前为止我发现的建议:

  • 将我的C ++函数声明为extern C并使用__stdcall
  • 为参数和返回类型使用基本C类型而不是STL容器(例如char *而不是std :: string)
  • 使用指针作为需要修改的输入参数而不是参考

假设typedef unsigned char byte;

这是一个压缩功能。它期望的输入是输入数据(传递为byte *),输入数据的大小(作为int传递),指向存储压缩大小的变量的指针(作为int *传递),以及一个字符串in如果需要,可以存储哪些错误消息(作为char *传递)。函数malloc是输出缓冲区,写入输出,并返回一个字节*,调用代码在使用缓冲区时应该释放缓冲区。如果发生错误,错误消息将被绑定到错误字符串中,并返回NULL指针。

我目前的设置是否正确,还是我需要进行一些其他修改才能从.NET调用?

1 个答案:

答案 0 :(得分:2)

托管代码无法释放内存,因此无法访问内置于CRT中的分配器。您可以使用CoTaskMemAlloc()来分配缓冲区,托管代码可以调用Marshal.FreeCoTaskMem()。您必须将缓冲区指针参数声明为“ref IntPtr”或将函数的返回类型声明为IntPtr。这为托管代码提供了将其转换为托管字节数组的麻烦。

这不是很好,当您在C ++ / CLI中编写代码或编写COM服务器时,这些问题就会消失。