Мне нужно создать DLL, которая работает с функцией обратного вызова. Когда я установил время выполнения Libary = многопоточная Debug (/ MTd) в свойствах проекта, он генерирует сообщение об ошибке:Функция обратного вызова не работает Многопоточная отладка (/ MTd)
Но когда я установил время выполнение Libary = многопоточный Debug DLL (/ MDD), приложение работает отлично
Посмотрите на мою DLL:
callbackproc.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);
}
callbackpro.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;
}
Где я буду неправильно? Танки!
Вы нажали «Повторить» (Repetir), чтобы отладить приложение? Что вы обнаружили? –
Просьба указать спецификацию времени выполнения (MTd, MDd) для вашего приложения и DLL –
Я получаю еще одну ошибку = Exoression _pFristBlock == pHead и применение следует за потоком. но когда функция и вызов снова вернулись к той же проблеме – msantiago