extern "C" __declspec(dllexport) void USBEndpoint_subscribe(USBEndpoint* endpoint, CALLBACK callback) {
try {
subscribe_internal(endpoint, callback);
} catch (int e_code) {
exception_report(__FILE__, __LINE__, e_code); \
} catch (...) {
exception_report(__FILE__, __LINE__);
}
void subscribe_internal(USBEndpoint* endpoint, CALLBACK callback)
{
...
}
问题是在USBEndpoint_subscribe接收到的端点值与进入subscribe_internal的值不同。例如:
调试时,我可以看到USBEndpoint_subscribe收到: 端点=0x00000000088f0680(和回调=0x0000000000540f50)
一旦我进入subscribe_internal,inside subscribe_internal的值是: endpoint=0x000007fef15f7740(回调=0x0000000000000000)。在
我没有生成其他线程,我正在以发布模式编译库**。我唯一的嫌疑可能是堆栈腐败,但实际上我知道发生了什么。在
任何可能发生的事情的暗示都是非常受欢迎的。在
**我在调试模式下编译过python,但是使用spider设置速度很慢,如果使用调试编译版本,我会丢失交互式控制台,因此我更喜欢使用发行版python,并在release中编译我的库。在
编辑:
正如建议的那样,我将python的调试版本与库的调试编译一起使用。但我还是得到了相同的行为(端点:0x0000000002be80e0->;0x0000000000000000,回调:0x0000000000320f88->;0x00000000024d24b8)。没有其他有用的信息出现在这里,不是在发布模式。在
我使用CDLL(“path”)加载库,这使得调用约定成为cdecl。即使我用/Gd在VS2008中编译,它似乎在使用其他约定。在函数声明中添加\uu cdecl可以解决这个问题。在
相关问题 更多 >
编程相关推荐