Я учусь собирать DLL и вызывать ее из другого проекта (я также хочу, чтобы DLL могла вызываться не только C / C ++, но и Python).Вот мой код для сборки DLL:
callbacktesetDLL.h:
#ifdef CALLBACKTESTDLL_EXPORTS
#define CALLBACKTESTDLL_API __declspec(dllexport)
#else
#define CALLBACKTESTDLL_API __declspec(dllimport)
#endif
typedef int(CALLBACK *p)(char*);
CALLBACKTESTDLL_API int __stdcall StrToInt(char*);
CALLBACKTESTDLL_API char* __stdcall NumCompare(p FuncP, char*, int b);
callbacktestDLL.cpp:
#include "stdafx.h"
#include <stdio.h>
#include "callbacktestDLL.h"
#include <stdlib.h>
CALLBACKTESTDLL_API int __stdcall StrToInt(char* StrInput)
{
int IntResult;
IntResult = atoi(StrInput);
return IntResult;
}
CALLBACKTESTDLL_API char* __stdcall NumCompare(p FuncP, char* StrInput, int b)
{
int a = FuncP(StrInput);
if (a>b)
{
return "a is bigger than b";
}
else
{
return "b is bigger than a";
}
}
И файл Source.def:
LIBRARY
EXPORTS
StrToInt @1
NumCompare @2
С кодом выше я получил callbacktestDLL.dll
и callbacktestDLL.lib
.С зависит , имена функций в DLL могут быть показаны:
Теперь я хочу вызвать функции в DLL из другого проекта:
CallDLL.h:
#pragma comment(lib,"callbacktestDLL.lib")
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
typedef int(*p)(char*);
extern "C" _declspec(dllimport) int StrToInt(char* InpuString);
extern "C" _declspec(dllimport) char* NumCompare(p FuncP, char*, int b);
CallDLL.cpp:
#include "stdafx.h"
int main()
{
p FuncP_R = StrToInt;
NumCompare(FuncP_R, "1234", 40);
return 0;
}
Однако, когда я запускаю проект, он сказал мне: error LNK2019: unresolved external symbol __imp__StrToInt
и error LNK2019: unresolved external symbol __imp__NumCompare
.Я уже скопировал файлы .lib
и .dll
в корневую папку проекта CallDLL.Почему это происходит?Как я могу решить это?Спасибо за внимание.