在x64 C ++ dll中创建新的std :: string,由C#通过pinvoke调用

时间:2013-12-24 04:11:47

标签: c# c++ dll interop

我正在尝试使用为x64构建的复杂的现有C ++项目构建C ++ DLL。

我目前只是将一个非常简单的函数导出为测试。

extern "C"{
    void suthPsEval(const char *a, const char *b, char *result, int len)
    {

        int aLen = 0;
        for (int i = 0; a[i] != '\0'; i++) {
            result[i] = a[i];
            aLen++;
        }
        for (int j = 0; b[j] != '\0'; j++){
            result[aLen + j] = b[j];
        }
        //std::vector<std::string> foo;  //THIS LINE CRASHES PROGRAM???
    }
}

当我注释掉试图创建字符串向量的行时,事情按照我的预期工作,我可以从我的C#中调用导出的函数,并且它可以正确地连接字符串。类似地,当我在不同的测试Win32 DLL中运行完整代码(在取消注释相关行之后),我构建的一切都正常工作。

但是在x64 DLL中,声明foo的单行会导致程序因System.AccessViolationException而崩溃。

我认为对此有一些简单的解释,希望能够轻松解决这个问题。我是C ++的新手,所以我不知道如何解决这个问题。我需要与之交互的复杂C ++代码高度依赖于即将创建字符串和向量。

是否有可能将x64 dll转换为Win32,还是可能会破坏一切?

0 个答案:

没有答案