gpt4 book ai didi

c++ - 回调函数不起作用多线程调试 (/MTd)

转载 作者:行者123 更新时间:2023-11-30 02:00:09 27 4
gpt4 key购买 nike

我需要创建一个与回调函数一起工作的 dll。当我在项目属性中设置 Runtime Libary = Multi-threaded Debug (/MTd) 时,它生成此错误消息:

enter image description here

但是当我设置 Runtime Libary = Multi-threaded Debug DLL (/MDd) 时,应用程序运行完美

查看我的 DLL:

回调函数.h

#include <string>

#ifdef CALLBACKPROC_EXPORTS
#define CALLBACKPROC_API __declspec(dllexport)
#else
#define CALLBACKPROC_API __declspec(dllimport)
#endif

// our sample callback will only take 1 string parameter
typedef void (CALLBACK * fnCallBackFunc)(std::string value);

// marked as extern "C" to avoid name mangling issue
extern "C"
{
//this is the export function for subscriber to register the callback function
CALLBACKPROC_API void Register_Callback(fnCallBackFunc func);
}

回调函数.cpp

#include "stdafx.h"
#include "callbackproc.h"
#include <sstream>

void Register_Callback(fnCallBackFunc func)
{
int count = 0;

// let's send 10 messages to the subscriber
while(count < 10)
{
// format the message
std::stringstream msg;
msg << "Message #" << count;

// call the callback function
func(msg.str());

count++;

// Sleep for 2 seconds
Sleep(2000);
}
}

stdafx.h

#pragma once

#include "targetver.h"
#define WIN32_LEAN_AND_MEAN
// Windows Header Files:
#include <windows.h>

我的应用程序使用了一个 dll

#include <windows.h>
#include <string>

#include "callbackproc.h"

// Callback function to print message receive from DLL
void CALLBACK MyCallbackFunc(std::string value)
{
printf("callback: %s\n", value.c_str());
}

int _tmain(int argc, _TCHAR* argv[])
{
// Register the callback to the DLL
Register_Callback(MyCallbackFunc);

return 0;
}

我哪里错了?坦克!

最佳答案

在我看来,这是一个跨越 DLL 边界传递 std 类型(在本例中为 std::string)的经典问题。

作为最佳实践,仅跨 DLL 边界传递“ native ”数据类型,我敢肯定 99% 的情况下,如果您从

typedef void (CALLBACK * fnCallBackFunc)(std::string value);

typedef void (CALLBACK * fnCallBackFunc)(const char* value);

无论底层运行时如何,您的代码都能正常工作

关于c++ - 回调函数不起作用多线程调试 (/MTd),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15439324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com