救命:用asm写的静态库如何在vc中调用?

ddong 2003-12-15 03:02:47
近日练习mmx,所以用masm写了一个.asm,并写了相应的.h文件,加到一个新建的win32 静态库库,编译通过。但是在另外一个工程里调用的时候出错:
asm 开始的声明:
.586
.mmx
.model flat,stdcall
PUBLIC _RGB24_to_RGB16_555
C的头文件中的声明:
extern "C" void __stdcall RGB24_to_RGB16_555(const char* s,char* d);

在别的工程调用时,编译通过,但是连接是出错:未解析的外部名__RGB24_to_RGB16_555@20,但是如果去掉.asm中的stdcall和.h中的__stdcall,则可以正常通过。

不只是什么原因?请各位大虾指教!!!!!!!!

...全文
49 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫郢剑侠 2003-12-15
  • 打赏
  • 举报
回复
楼主用的是VC还是BCB?
W32API 2003-12-15
  • 打赏
  • 举报
回复
“近日练习mmx,所以用masm写了一个.asm,并写了相应的.h文件,加到一个新建的win32 静态库库,编译通过。”

把你这部分的东西贴出来。。。
ddong 2003-12-15
  • 打赏
  • 举报
回复
还是不行,错误为error LNK2001: unresolved external symbol _RGB24_to_RGB16_555@20
ddong 2003-12-15
  • 打赏
  • 举报
回复
谢谢。我试一下
阿发伯 2003-12-15
  • 打赏
  • 举报
回复
我想是因为你的调用方式与asm函数不符,stdcall其实是pascal调用,调用时参数顺序压栈,函数名也不要_,而cdecl调用参数反序压栈,函数名要有_。你的asm函数是按cdecl方式写的,而偏要在asm和h文件中定义为stdcall,调用连接当然出错,另外,编译asm函数时也要注意编译方式,如区分大小写等,否则也会出错

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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