【发布时间】:2010-10-04 06:53:02
【问题描述】:
我正在尝试将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^吗?
提前致谢。
【问题讨论】:
-
第一个问题:放
CharSet=CharSet::Ansi和CallingConvention=CallingConvention::Cdecl,见msdn.microsoft.com/en-us/library/7b93s42f.aspx和msdn.microsoft.com/en-us/library/… -
第二个问题,使用
Marshal.PtrToStringAnsi,见bytes.com/topic/c-sharp/answers/… -
为什么在C++/CLI中需要PInvoke,直接调用非托管函数就好了。 PInvoke 适用于 C#/VB 程序员。
标签: c++-cli