我正在尝试使用为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,还是可能会破坏一切?