调用C++;来自C#

调用C++;来自C#,c#,c++,exception,dll,managed,C#,C++,Exception,Dll,Managed,我不知道为什么,但今天我的阴茎似乎不起作用了。无论如何我有这个问题:我有一个非托管C++库(DLL),我必须嵌入到一个现存的C语言项目中。现在。。。我在管理C++中创建了一个迷你包装器(DLL),它调用库,以便我可以从C代码中加载它,当我从命令行C项目中试用它时,它是完美的,正确的结果,正确的行为ECC。 现在,当我在实际项目中加载它时,它开始给我一个奇怪的System.AccessViolationException,它来自迷你包装器DLL。我在C语言中没有经验,也没有Windows下的一般的

我不知道为什么,但今天我的阴茎似乎不起作用了。无论如何我有这个问题:我有一个非托管C++库(DLL),我必须嵌入到一个现存的C语言项目中。现在。。。我在管理C++中创建了一个迷你包装器(DLL),它调用库,以便我可以从C代码中加载它,当我从命令行C项目中试用它时,它是完美的,正确的结果,正确的行为ECC。 现在,当我在实际项目中加载它时,它开始给我一个奇怪的System.AccessViolationException,它来自迷你包装器DLL。我在C语言中没有经验,也没有Windows下的一般的非托管C++开发,我就是不明白为什么要从C项目中工作,而不是从另一个项目工作。 更多信息:原始库使用OGRE3D渲染引擎进行计算,而我必须使用该库的项目使用了OGRE under the hood,这会导致问题吗


有什么建议吗

这里有一些想法供您尝试,先生

很难知道到底发生了什么,但是我要做的第一件事就是从混合中删除这个托管C++ dll。这可能会让事情变得混乱。在这里的某个地方,感觉数据在托管世界和非托管世界之间没有正确编组。而且,仅仅因为它没有从控制台崩溃,并不一定意味着代码工作正常,它仍然可能会崩溃,只是不会触发访问冲突。我要看的第一件事是使用p/invoke直接调用非托管dll,如果它中断,您应该很快就会知道:

  • 可能是在混合中的某个地方,该指针被移动到另一个地址空间,而该指针在该地址空间中毫无意义。这里有流程边界吗


  • 真正的项目意味着另一台机器吗?我的意思是,你是否尝试在不同的环境中使用dll?不同的C#项目,但相同的机器。