2010-06-09 67 views
0

我有一个旧的C/C++类,我想重构和.NET中使用的PInvoke反向P /调用教程?

全部P访问/调用教程是指调用Win32 API的,但我没有发现任何其他端代码

任何提示/想法?我的C/C++的经验是很生疏:(

更新 - 这是用于包装现有的C/C++代码,以便它可以从.NET,使用P叫/调用

如何定义的C函数,以便从。我可以使用ref/out字符串获得值

+1

我很困惑。您是否试图从C#调用C/C++ DLL(除了win32 API)或试图从C/C++调用C#代码? – 2010-06-09 18:54:27

+0

什么是C/C++类?你不能直接在P/Invoke中使用C++类,需要一个包装器。 – 2010-06-09 19:21:51

+0

我正在尝试重写现有的c/C++代码,以便可以从.net中调用.net – Kumar 2010-06-09 19:21:59

回答

1

根据我的经验,最简单的方法是将您的C++类变为COM类(或者为此创建一个辅助类),然后在其中添加对其的引用.NET项目

如果您想从C++访问.NET对象,则情况正好相反,请将其标记为ComVisible并使用tlbexp为导入的本机代码创建一个TLB(然后您可以将其用作常规COM对象)。

+0

使它兼容将是我的头 这基本上是读取一些自定义的二进制数据,所以pinvoke似乎最简单,如果我能弄清楚如何返回ref/out字符串 – Kumar 2010-06-09 19:24:49

+0

@Kumar,你不必做出整体类COM兼容,只需使用调用此本机函数的一个函数创建一个小COM对象即可。否则,你可以使用P/Invoke,你试过'[MarshalAs(UnmanagedType.LPStr)] out string s'? – Motti 2010-06-10 05:47:53

+0

我是一个VC++新手,任何关于如何获得的指针/示例,没有显示在谷歌搜索com兼容类等。 – Kumar 2010-06-10 14:12:05