编译生成DLL工程报LINK错误

绝世酱油瓶 2015-03-18 04:57:21
编译环境VC++6.0.
新建一个简单的DLL工程,工程结构如下:

除了libEMV.cpp,StdAfx.cpp是新建工程自动生成的,其他的是引用的现成的一些C文件,这些C文件确定没有问题,
在android,windows,mac等各种环境都正常编译过。
但是现在引用报错,错误如下:


报错的2个函数在PubSub.h中有声明,也引用了头文件。
PubSub.h头文件中声明:
unsigned char IccIsoCommand(unsigned char slot, APDU_SEND *ApduSend, APDU_RESP *ApduRecv);
int GetPlainPin(unsigned char *pszPlainPin);

PubSub.h中引用:
#include "PubSub.h"

int Dev_GetPlainPin(unsigned char *pszPlainPin) // 20130710
{

//get plain pin from keyboard

// memcpy(pszPlainPin, "1234", 4); // 20130710
return GetPlainPin(pszPlainPin);
}

unsigned char Dev_IccIsoCommand(unsigned char slot, APDU_SEND *ApduSend, APDU_RESP *ApduRecv)
{
return IccIsoCommand(slot, ApduSend, ApduRecv);
}

求解,何原因?
...全文
120 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-03-19
  • 打赏
  • 举报
回复
解决啦 ?
绝世酱油瓶 2015-03-19
  • 打赏
  • 举报
回复
那个头文件里好多函数,唯独这2个报错,我也是醉了。
绝世酱油瓶 2015-03-19
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
Test.h
extern "C"
{
int GetVal1();
int CalcAdd(int,int);

};

Test.c //文件右键点击属性,取消预编译头
//#include "Test.h"

int GetVal1()
{
return 100;
}

int CalcAdd( int a,int b)
{
return a+b;
}



调用
int x=3,y=4;
int z=CalcAdd(x,y);



一切正常!!!


error C2059: syntax error : 'string' 这是我使用extern报的错,奇怪了,已经取消预编译
worldy 2015-03-19
  • 打赏
  • 举报
回复
Test.h extern "C" { int GetVal1(); int CalcAdd(int,int); }; Test.c //文件右键点击属性,取消预编译头 //#include "Test.h" int GetVal1() { return 100; } int CalcAdd( int a,int b) { return a+b; } 调用 int x=3,y=4; int z=CalcAdd(x,y); 一切正常!!!
绝世酱油瓶 2015-03-19
  • 打赏
  • 举报
回复
哪个大牛可以远程帮我看看
绝世酱油瓶 2015-03-19
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
将C的函数原型,使用 entern “C” { 原型 } 包含起来
这个试过,会报错。在C文件用这个关键字报错的。
worldy 2015-03-19
  • 打赏
  • 举报
回复
将C的函数原型,使用 entern “C” { 原型 } 包含起来
绝世酱油瓶 2015-03-19
  • 打赏
  • 举报
回复
引用 3 楼 worldy 的回复:
什么都没有调用应该可以,那你那错误是已经有调用了出错
调用是在C文件里调用的,头文件也引用了,在其他地方直接编译都没有问题。 这个vc上我是想封装下那些C代码 写个DLL,所以新建了个DLL工程,空的,放这编译都报错,用vs试过也是一样的错误。所以才觉得奇怪
worldy 2015-03-18
  • 打赏
  • 举报
回复
什么都没有调用应该可以,那你那错误是已经有调用了出错
绝世酱油瓶 2015-03-18
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
C在C++中被调用会有问题,CPP文件会名字粉粹,C不会,应该做一个声明的.h文件 extern C语句指明哪些是C的函数
请问,只是放到工程里,还没有到调用都不可以吗?
// libEMV.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

我的CPP文件是一个空的。
worldy 2015-03-18
  • 打赏
  • 举报
回复
C在C++中被调用会有问题,CPP文件会名字粉粹,C不会,应该做一个声明的.h文件 extern C语句指明哪些是C的函数

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧