我有一个c#dll项目(my_cs_dll.dll
),它定义了静态成员函数的静态类。如何从C++调用托管(c#)函数?
namespace Foo
{
public static class Bar
{
public static double GetNumber() { return 1.0; }
}
}
我也有一个使用/ clr的C++ dll项目。
#using <my_cs_dll.dll>
double get_number_from_cs() { return Foo::Bar::GetNumber(); }
我已经添加在C到'my_cs_dll.dll'
参考++项目通用属性引用部分(复制本地/复制的依赖都是如此)。
而且我还在C++项目Configuration Properties C/C++ General'Resolve#using References'部分中添加了'my_cs_dll.dll'
的路径。
所有内容都没有错误,但是在运行时,我一直从系统中得到一个'System.IO.FileNotFound'异常,声称它找不到my_cs_dll.dll
程序集。
这两个DLL都肯定存在于我运行的同一个目录中。
我已经试过各种上文提到的设置变化和阅读了所有我能找到manged /非托管互操作,但我似乎无法得到解决什么是错的我的大脑......
我使用VS2008 & .NET 3.5
马特嗨, “它必须在目录(或子目录)在您的可执行文件的位置,而不是DLL的位置,目前正使用它” DLL的嵌套的exe下面几个子目录。将托管的dll移动到与可执行文件相同的目录中,清除了问题。 谢谢! – mark 2009-09-24 07:02:22
好,太好了。我的印象是,只要dll位于可执行文件的子目录中,无论深度多大,程序集都将被解析。但正如我所说,从我看过这一段时间以来已经有一段时间了。 – 2009-09-24 07:04:55
从嵌入式资源加载C#DLL时,我使用了类似的代码。这里的技巧是将这些代码放在一个没有引用C#DLL的文件中。看来,延迟加载的。网络程序集在进入一个编译单元(一个.cpp文件)时发生,该编译单元包含对所讨论的程序集的引用,而不是实际进行引用程序集的调用时(如果有的话)。 – mheyman 2013-02-07 15:44:41