日期:2014-05-20  浏览次数:21022 次

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
------解决方案--------------------
老贴