我正在嘗試創建一個混合模式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