使用汇编语言编写基于Windows的程序以使用库。 Windows XP Sevice Pack 3 32位程序集。在我调用库中的任何函数之前,Cand将include和lib文件放到项目中甚至可以正确编译!
LINK:致命错误LNK1196:导入对象无效或损坏:未知版本所以我有库的源代码如何让链接器停止抱怨错误? 我想我需要知道我要在库的源代码中做些什么才能使它符合要求? 该库正确编译,我可以在C或C ++中使用它,但我在汇编语言中更加舒适,已经做了30多年。 提前谢谢!
答案 0 :(得分:0)
要从Windows VS环境中的汇编语言例程调用库例程,需要执行以下步骤(示例来自VS 2015):
步骤1:在汇编程序中,请声明如下函数(例如_sopen_s()):
extern _sopen_s:proc;这是一个库函数
步骤2:Project环境必须包含包含该功能的库。对于标准的VS C / C ++库,这可以通过Project-> Linker-> General-> Link Library Dependencies设置为" Yes"
来完成。如果您已创建自己的库,则Project-> Linker-> General->其他库目录应指向其他库所在的目录。
现在关于包含,请注意包括定义某些标志值,所以如果你想使用任何特定的标志值,你需要重写"重写"它是
SEEK_CUR EQU 1;从stdio.h复制
或直接使用,如下所示(文件创建示例):
lea rcx,dest_file_descriptor ; int * fd
mov rdx,r11 ; filename * in R11
mov r8,8000H ; set up the flag _O_BINARY (we handle all translations ourselves)
or r8,100H ; or with _O_CREAT
or r8,200H ; and further or with _O_TRUNC
or r8,0002H ; and finally with _O_RDWR (fcntl.h)
mov r9,040H ; set up the flag _SH_DENYNO (share.h)
mov r10,0080H ; set up the flag _S_IWRITE (io.h)
or r10,0100H ; or with _S_IREAD
sub rsp,20H
push r10 ; _sopen_s(int * fd,char * filename, _O_BINARY | _O_CREAT | _O_TRUNC | _O_RDWR, _SH_DENYNO, _S_IWRITE)
call _sopen_s
pop r10
add rsp,20H
相信这有帮助......根据我的经验,它通常是一个令人沮丧的开始,但很快就会被整理出来......