我使用的是一个应用程序(几周前刚开始,所以我还在学习旧的应用程序)用C语言构建,我的公司希望使用该程序调用外部DLL的能力扩展一些新功能。为此,我开始研究我的POC,这是下面的前两个文件。我们给出的唯一规范是dll必须导出以下函数:
extern int __stdcall TestMethod_LoadCustomer(const char * name, char * id);
我尝试按如下方式实现:
TestDLL.h
#define TestDLL_API __declspec(dllexport)
namespace TestDLL
{
class TestDLL
{
public:
static TestDLL_API int TestMethod_LoadCustomer(const char* name, char* id);
};
}
TestDLL.cpp
// TestDLL.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "TestDLL.h"
#include <string.h>
extern "C" int __declspec(dllexport) __stdcall TestMethod_LoadCustomer(const char* name, char* id)
{
if (strlen(name) <= 8) {
strcpy(id, name); // name contains customer id
} else {
id[0] = 0; // Customer not found
}
return 0;
}
这两个文件编译正常。当我尝试通过此处显示的单独的小控制台应用程序测试此dll时出现问题: RunTEST.cpp
// RunTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include "TestDLL.h"
using namespace std;
int _tmain()
{
char* id= "";
TestDLL::TestDLL::TestMethod_LoadCustomer("77777", id);
cout << id;
cin >> id;
return 0;
}
我正在寻找的是能够将一个字符串传递给调用TestMethod_LoadCustomer()并将其添加到id字段中。
当我真正尝试构建此解决方案时,我收到以下错误:
“错误LNK2019:未解析的外部符号”public:static int __cdecl TestDLL :: TestDLL :: TestMethod_LoadCustomer(char const *,char *)“(?TestMethod_LoadCustomer @ TestDLL @ 1 @ SAHPBDAD @ Z)在函数_wmain中引用”< / p>
我认为它与我试图在我的客户端应用程序中引用它的方式有关,但我不确定。我已经查看了StackOverflow上的其他LNK2019错误,但这些解决方案似乎都没有在这里工作,我没有错误地实现它们。任何人都可以帮助我摆脱这个错误信息吗?
答案 0 :(得分:0)
在TestDLL.cpp中定义函数时,您没有提到该函数是TestDLL类的成员。
答案 1 :(得分:0)
在TestDLL.cpp文件中缺少两件事:
1)命名空间TestDLL。
2)在方法名称之前的TestDLL ::。
// TestDLL.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "TestDLL.h"
#include <string.h>
namespace TestDLL {
extern "C" int __declspec(dllexport) __stdcall TestDLL::TestMethod_LoadCustomer(const char* name, char* id)
{
if (strlen(name) <= 8) {
strcpy(id, name); // name contains customer id
} else {
id[0] = 0; // Customer not found
}
return 0;
}
}