在x64 C+中创建新的std::string+;由C#通过pinvoke调用的dll 我试图从正在构建的复杂的现有的C++项目中构建一个C++ DLL,用于x64 .< /p>

在x64 C+中创建新的std::string+;由C#通过pinvoke调用的dll 我试图从正在构建的复杂的现有的C++项目中构建一个C++ DLL,用于x64 .< /p>,c#,c++,dll,interop,C#,C++,Dll,Interop,我现在只是导出一个非常简单的函数作为测试 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++; } fo

我现在只是导出一个非常简单的函数作为测试

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???
    }
}
extern“C”{
void suthPsEval(常量字符*a、常量字符*b、字符*result、int len)
{
int-aLen=0;
对于(int i=0;a[i]!='\0';i++){
结果[i]=a[i];
aLen++;
}
对于(int j=0;b[j]!='\0';j++){
结果[aLen+j]=b[j];
}
//std::vector foo;//此行使程序崩溃???
}
}
当我注释掉试图创建字符串向量的行时,事情正如我所期望的那样工作,我能够从我的C#调用导出的函数,并且它正确地连接字符串。类似地,当我在另一个测试Win32 DLL中运行完整代码时(在取消注释有问题的行之后),我构建的所有东西都正常工作

但是,在x64 DLL中,声明foo的单行会导致程序崩溃,并出现System.AccessViolationException

我假设对此有一些简单的解释,希望有一个简单的方法来解决这个问题。我对C++非常陌生,所以我不知道如何解决这个问题。我需要与之接口的复杂C++代码高度依赖于创建字符串和向量。
是否可以将x64 dll转换为Win32,或者这可能会破坏一切?

您要添加/删除的正是这一行?你不是想把向量交给C++或任何古怪的东西吗?如果你把<代码> STD::vector < /C> >到一个没有被<代码>外“C”<代码>包装的C++函数,那么它仍然失败吗?我没有对向量做任何操作。@JoeZ如果我在外部“C”之外创建一个函数void temp(),并将崩溃行移动到temp中并调用它,我会得到相同的行为。当这行被注释掉时,一切正常,当未注释时它崩溃。我对Windows DLL编程的知识有限。基于刚才的实验(移动<代码>向量<代码>行> <代码>外部“C”/代码>,感觉好像C++环境初始化步骤丢失了,但这只是我对运行时环境如何工作的模糊理解,而不是Win32或Win64的任何特定。