P /调用运行时错误

时间:2011-11-26 22:45:07

标签: c# c++ pinvoke

我正在尝试围绕C ++ dll创建托管包装器。当我尝试运行测试应用程序时,出现错误,说加载dll失败。这是试图找到CRT的问题。将CRT复制到同一目录会移过此问题,但随后会抛出错误,指出应用程序错误地加载了C运行时(R6034)。本机C ++程序可以解决这两个问题。

dll是使用vc 2008编译的 - 托管代码是在2010年编译的。

dll有一个清单,我尝试将CRT的确切版本复制到工作目录中,结果与上面相同。

我的问题是:

  1. 为什么本机程序可以加载CRT,但托管包装器找不到它?
  2. 我在哪里可以找到解决加载CRT的第二个错误的问题? 这可能是因为名称损坏,CallingConvention等?
  3. C ++代码(我只有标题):

    class Foo {
    public:
       static void startCall(std::string hostname);
    }
    

    C#代码:

        [DllImport("mydll.dll")]
        public static extern void startCall(string hostname );
    
        public Test()
        {
            string hostname = "";
            startCall(hostname);
        }
    

1 个答案:

答案 0 :(得分:0)

据我所知,如果你想使用C#中的函数,就不可能在函数接口中使用STL。

如果您可以更改C ++库接口,请将其更改为使用char *而不是字符串。如果你不能编写一个代理库,它使用char *公开接口并将其转换为std :: string,然后调用具有std :: string

函数的c ++库