我想用C#调用c ++ dll文件来获取数据。
在C ++中,
extern "C" int _DLLExport Process_Read( char **msg );
在C#中,
[DllImport( "ProcessExport" )]
public static extern int Process_Read( ref string msg );
=================
string msg;
int msg_len = 0;
msg_len = Process_Read( ref msg );
=================
我怎样才能显示msg数据? 谢谢。
答案 0 :(得分:2)
DllImport只能用于导入C函数,而不能用于导入C ++类方法(即使它们是静态的)。
如果你用regsvr32注册它是一个c ++ com对象,你可以在visual studio com references选项卡中添加对dll的引用,通常visual studio会创建一个dll(我认为它叫做运行时可调用包装器)你可以看到是使用nameoflibrary.interop.dll创建的。所以MyExecRefsDll.dll如果是一个com对象将成为MyExexRefs.Interop.dll。但是当您添加引用时,Visual Studio通常会在托管代码中自动为您执行此操作。如果你通过在c ++中使用atl模板创建一个c ++ dll作为com对象,则更容易从dotnet访问(Iam引用来自dll的非托管c ++代码引用另一个dll文件(没有代码从第二个dll复制我只是引用tlb ,lib,dll文件和visual studio完成其他所有工作。
看一下这个教程,它使得这个过程像水晶球一样清晰: http://www.codeproject.com/Articles/505791/A-Beginner-Tutorial-for-Writing-Simple-COM-ATL-DLL?q=creating+an+atl+dll+c%2b%2b
请记住找到tlb和lib(通常在编译后创建其他dll的文件夹中。)并通过右键单击解决方案资源管理器引用它们,并添加 - >从主要引用的第二个dll的现有项目DLL。 tlb和lib允许你从dll调用函数(每次将代码更新到第二个dll时,总是将它们的新版本复制到你的项目文件夹中。)