我正在尝试创建一个混合模式dll,其中包含一些用于调用托管代码的函数,如说,Delphi和C++。从非托管调用托管代码时发生StackoverflowException
我得到它的工作,但现在我只是在调试器中得到System.StackoverflowException,我想知道我做错了什么。
的代码非常简单
unmanaged.h
#pragma once
#pragma unmanaged
#include <Windows.h>
typedef void (*ByteCallback)(unsigned char * bytes, int len);
namespace Something {
extern "C"{
__declspec(dllexport) void InteropInit(ByteCallback responseCallback, ByteCallback requestInformationCallback);
}
};
unmanaged.cpp
#include "Stdafx.h"
#include "Managed.h"
#include "Unmanaged.h"
#pragma unmanaged
namespace Something{
void InteropInit(ByteCallback responseCallback, ByteCallback requestInformationCallback) {
Something::ManagedInit();
}
};
managed.h
#include "Stdafx.h"
#pragma managed
namespace Something{
void ManagedInit();
};
managed.cpp
#include "Stdafx.h"
#include "Managed.h"
#include <string>
#pragma managed
namespace Something {
void ManagedInit() {
System::Console::WriteLine("Hallo");
};
};
堆栈跟踪(这推移和进行,直到Visual Studio中不会显示任何行)
[email protected]() + 0x2f244 bytes
[email protected]() + 0x12 bytes
[email protected]() + 0x19 bytes
[email protected]() + 0xf bytes
[email protected]() + 0x2f244 bytes
[email protected]() + 0x12 bytes
[email protected]() + 0x19 bytes
[email protected]() + 0xf bytes
有人能帮助我吗?
它看起来像是在某处抛出一些异常。您是否尝试过调试并找出它是什么? – svick
您的真实代码是否不使用'responseCallback'和'requestInformationCallback',或者您是否过分简化了您的问题? – ildjarn
它在调试器中,我得到了你在这里看到的stackoverflowexception和stacktrace。 – Thomas