从非托管调用托管代码时发生StackoverflowException



我正在尝试创建一个混合模式dll,其中包含一些导出的函数,用于从Delphi和c++调用托管代码。

我让它工作,但现在我只得到系统。调试器中的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");
};
};

Stacktrace(这个循环往复,直到visual studio不再显示任何行)

ntdll.dll!_RtlpCallVectoredHandlers@12()  + 0x2f244 bytes   
ntdll.dll!_RtlCallVectoredExceptionHandlers@8()  + 0x12 bytes   
ntdll.dll!_RtlDispatchException@8()  + 0x19 bytes   
ntdll.dll!_KiUserExceptionDispatcher@8()  + 0xf bytes   
ntdll.dll!_RtlpCallVectoredHandlers@12()  + 0x2f244 bytes   
ntdll.dll!_RtlCallVectoredExceptionHandlers@8()  + 0x12 bytes   
ntdll.dll!_RtlDispatchException@8()  + 0x19 bytes   
ntdll.dll!_KiUserExceptionDispatcher@8()  + 0xf bytes   

有人能帮帮我吗?

我不知道你到底在做什么,但是这个

typedef void (*ByteCallback)(unsigned char * bytes, int len);

应该是一个Windows回调函数,对吗?几乎所有的回调都使用stdcall,所以

typedef void (__stdcall *ByteCallback)(unsigned char * bytes, int len);

可能会起作用。当然,您还需要将__stdcall添加到您传递的函数中。

相关内容

  • 没有找到相关文章

最新更新