把.c文件改成.cpp就出错,为什会找不到函数呢?

zzPandazz 2010-10-07 09:15:19
把源文件改成.cpp把sources里的.c也改成.cpp的就出以下错误,为什会找不到函数呢?

error C4162: '_InterlockedCompareExchange' : no function with C linkage found d:\winddk\2600\inc\ddk\wxp\ntddk.h 6935

我不是想用cpp写,只是想知道别人为什么能用cpp我不能
...全文
974 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzPandazz 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 cnzdgs 的回复:]
引用 9 楼 zkkpkk 的回复:
原来头文件里确实没有对cpp宏的处理
但是加上后又变成了
error LNK2001: unresolved external symbol _DriverEntry@8 link
连DriverEntry都不认了

DriverEntry也要加:
extern "C" NTSTATUS DriverEntry(……
[/Quote]

问题解决了
zzPandazz 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 eyey1 的回复:]
你是用WDF做driver吗,KMDF好像是支持面向对象,建议你找个例子修改看看.
[/Quote]
KMDF现在技术资料好荒芜啊
手机写程序 2010-10-08
  • 打赏
  • 举报
回复
你是用WDF做driver吗,KMDF好像是支持面向对象,建议你找个例子修改看看.
傻X 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
extern "C"
{
#include xxx.h
}
[/Quote]

学习了
zzPandazz 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
extern "C"
{
#include xxx.h
}
[/Quote]
原来头文件里确实没有对cpp宏的处理
但是加上后又变成了
error LNK2001: unresolved external symbol _DriverEntry@8 link
连DriverEntry都不认了
zzPandazz 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pzhfei 的回复:]
引用 3 楼 wltg2001 的回复:
用CPP作扩展名编译器就用C++的方式来编译的,用C作扩展名就会用C语言方式来编译的,原因可能是这个。



引用 5 楼
extern "C"
{
#include xxx.h
}


结合这个两个就可以解决了, C++编译器要支持面向对象的虚函数啊,函数重载啊, 模板等. 和C编译器的命名规则是不一样的, 所以会出找不到函数这样……
[/Quote]

加在哪里?ntddk.h里面不是自己定义有

#ifdef __cplusplus
#if __cplusplus
extern "C"{

吗?
zzPandazz 2010-10-08
  • 打赏
  • 举报
回复
我在sdk下是可以改的,因为调用函数规则都一样,除了扩展名是CPP就没用C++的东西,是不是有什么宏之类的可以告诉编译器,我现在用的是C++规则
cnzdgs 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zkkpkk 的回复:]
原来头文件里确实没有对cpp宏的处理
但是加上后又变成了
error LNK2001: unresolved external symbol _DriverEntry@8 link
连DriverEntry都不认了
[/Quote]
DriverEntry也要加:
extern "C" NTSTATUS DriverEntry(……
sunlin7 2010-10-08
  • 打赏
  • 举报
回复
DDK编译驱动程序,原则上不提倡使用C++的。请务必查看ddk里面的示例代码。
缘来是梦 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zkkpkk 的回复:]
引用 6 楼 pzhfei 的回复:
引用 3 楼 wltg2001 的回复:
用CPP作扩展名编译器就用C++的方式来编译的,用C作扩展名就会用C语言方式来编译的,原因可能是这个。



引用 5 楼
extern "C"
{
#include xxx.h
}


结合这个两个就可以解决了, C++编译器要支持面向对象的虚函数啊,函数重载啊, 模板等. 和C编译器的命名……
[/Quote]

加在引用C库的头文件, 和SDK库的头文件的地方
缘来是梦 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]
用CPP作扩展名编译器就用C++的方式来编译的,用C作扩展名就会用C语言方式来编译的,原因可能是这个。
[/Quote]

[Quote=引用 5 楼]
extern "C"
{
#include xxx.h
}
[/Quote]

结合这个两个就可以解决了, C++编译器要支持面向对象的虚函数啊,函数重载啊, 模板等. 和C编译器的命名规则是不一样的, 所以会出找不到函数这样的链接错误.
cnzdgs 2010-10-07
  • 打赏
  • 举报
回复
extern "C"
{
#include xxx.h
}
傻X 2010-10-07
  • 打赏
  • 举报
回复
建议楼主用VC6.0建个空的项目一步一步转。问题可能会小点。
wltg2001 2010-10-07
  • 打赏
  • 举报
回复
用CPP作扩展名编译器就用C++的方式来编译的,用C作扩展名就会用C语言方式来编译的,原因可能是这个。
laj0600310219 2010-10-07
  • 打赏
  • 举报
回复
cpp后缀是C++程序,C后缀是C程序,C跟C++使用的头文件已经函数库都是不太一样的,你肯定不能通过简单的修改后缀就想达到C程序变成C++程序的目的,相应的,你的程序的头文件已经一些函数调用也得做相应的修改才可以达到目的。
zyrr159487 2010-10-07
  • 打赏
  • 举报
回复
汗,你这是直接修改扩展名,没什么用的,人家是写入进去后生成的CPP

2,640

社区成员

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

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