我已经被分配了使用v140工具集将旧的interop dll升级到visualstudio2015的任务。
我现在收到了一个奇怪的访问冲突。
HostApp.exe中的0x000007fef7d3d95c(mscoreei.dll)抛出异常: 0xC0000005:访问冲突读取位置0xffffffffffffffff
我可以告诉当方法在单独的cpp中定义而不是4
中的内联时,会发生错误。这种解决办法是不可能的,因为这是我需要调用托管对象的地方。
这是我尝试重建代码的大纲:
共享标头IFoo.h
Foo.h
foo.h中
#ifdef DLL_EXPORTS
#define __API__ __declspec(dllexport)
#else
#define __API__ __declspec(dllimport)
#endif
class IFoo
{
public:
__API__ static IFoo* Create();
virtual void DoSomething()=0;
};
Foo.cpp中
#include IFoo.h
class Foo : public IFoo
{
public:
Foo() { } // if inline no crash
void DoSomething();
};
FooImpl.cpp
#include ManagedStuff.h
#include Foo.h
// Foo::Foo() { } // AV if not inline.
void Foo::DoSomething()
{
gcroot<ManagedClass^> stuff = gcnew ManagedClass();
.....
}