我试图将C++.NET
(托管扩展)应用程序移植到C++/CLI
。不过,我的语法还不够强大。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',请参阅http://msdn.microsoft.com/en-us/library/7b93s42f.aspx和http ://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx – rwong 2010-10-03 07:19:44
第二个问题,使用'Marshal.PtrToStringAnsi',请参阅http://bytes.com/topic/c-sharp/回答/ 554501-cc-interop-returning-char – rwong 2010-10-03 07:24:08
为什么你需要在C++/CLI中使用PInvoke,直接调用非托管函数。 PInvoke适用于C#/ VB程序员。 – 2010-10-03 07:37:51