我正在尝试将C++.NET
(托管扩展程序)应用程序移植到C++/CLI
。但是我的语法还不是很强。
我要做的是为C Dll
文件创建一个包装器。
要做到这一点,我正在使用DllImport,但我没有找到有关它的文档。由于语法的变化存在一些问题,但我还没找到原因。
C++.NET
行看起来像这样:
[DllImport("my.dll", CharSet = Ansi, CallingConvention = Cdecl, EntryPoint = "#10")]
static MY_STATUS CPPInit(MY_HANDLE *pLmxHandle);
我们的想法是将MY_HANDLE
的引用传递给初始化它的函数。一个问题是关键字Ansi
和Cdecl
未知。我希望我需要在他们面前放一些课程,但没有文档或样本会有点困难。
我的另一件事是一个返回静态字符串的函数:
char *MyFunc();
我可以假设它可以映射到String^
吗?
提前致谢。
答案 0 :(得分:0)
感谢您的评论。
我心里想,我需要构建一个混合模式库以避免p / invoke。这只需要一些时间。
实际上我用另一种方式解决了编译错误。虽然我还没有测试它,因为我面临一些32/64位问题,由于Whidbey beta2中的其他错误,我无法解决这些问题。
我的解决方案是以下列方式编写原型:
interior_ptr<MY_HANDLE> pMyHandle;
根据我的理解,它应该为函数提供dll函数的引用(因此是地址)。一旦我试一试,我会看看我的想法是否奏效 否则我会选择以下选项(我已经提供):
[Out] IntPtr p_MyHandle
无论如何,我认为问题已经解决,因为其中一个应该有用。