C++使用C#创建的DLL,C#的DLL只能放在C++生成的EXE同目录下吗?
由于项目需要,我需要使用C++的代码来调用C#产生的DLL。我写的试验代码如下:
C#,创建一个C#的类库项目,代码如下:
C# code
using System;
namespace TTest
{
public class Test
{
public Test() {}
public void test()
{
Console.WriteLine("Hello!!");
}
}
}
C++,创建一个CLR控制台项目,代码如下:
C/C++ code
#using "TTest.dll"
using namespace TTest;
int main()
{
Test ^obj = gcnew Test();
obj->test();
return 0;
}
C++代码中#using后边引用的dll就是C#生成的,这里写相对路径或绝对路径,只要能找到那个dll就行。在这里我是将TTest.dll直接拷贝到C++的代码目录中。
将C#生成的dll(TTest.dll)拷贝到C++生成的exe(test.exe)的同目录下,运行没有问题。
但问题是,只能将TTest.dll跟test.exe放在一起,否则就会报“
System.IO.FileNotFoundException”的异常。我试过将TTest.dll放在Path环境变量定义的目录中,甚至直接放在Windows目录中,但都不行。我也试过用RegAsm注册TTest.dll,但只要TTest.dll不跟test.exe在同一目录下,都会出错。
我的试验代码可以放一起,但真正的项目中是不能这么放的。
有没有人知道,这种情况下TTest.dll应该放在什么样的目录下?或是做什么样的处理?
------解决方案--------------------
反射调用 - - 取相对路径 或者注册成COM
------解决方案--------------------
老贴