编译环境:debootstrap 安装 debian bullseye
源码版本:Wine 9.0-rc4
基础环境搭建
在dlls目录下新建一个文件夹:nfs
将amsi目录下的三个文件全部复制到nfs目录下:
main.c 文件内容中新加一个函数如下:
BOOLEAN WINAPI Test_In_CreateWindowEx( const WCHAR *classname, ULONG* style, ULONG* dwExStyle )
{
TRACE( "classname=%s, style=0x08x, style=0x08x \n", debugstr_w(classname), style, dwExStyle);
return TRUE;
}
spec文件改名为nfs.spec, 将上面实现的函数导出给外部调用,nfs.spec内容如下:
@ stdcall Test_In_CreateWindowEx(ptr ptr ptr)
Makefile.in文件内容如下:(IMPORTLIB是为了生成.a文件)
MODULE = nfs.dll
UNIXLIB = nfs.so
IMPORTLIB = nfs
SOURCES = \
main.c
将源码根目录下的 configure和configure.ac两个文件的权限改为可以编辑。
chmod 777 ./configure
chmod 777 ./configure.ac
打开configure.ac 文件找到dlls/amsi配置所在的行,按其样式,在他下方添加新的模块名
...
WINE_CONFIG_MAKEFILE(dlls/amsi)
WINE_CONFIG_MAKEFILE(dlls/nfs)
...
修改完成后,执行autoconf命令,重新生成configure文件,文件中会包含如下内容:
...
wine_fn_config_makefile dlls/nfs enable_nfs
...
执行./configure
...
configure: Finished. Do 'make' to compile Wine.
运行成功后,在dlls/nfs目录下可以看到,一个名为Makefile的文件生成出来, 文件内容如下:
all:
all install install-lib clean i386-windows/main.o i386-windows/nfs.dll:
@cd ../.. && $(MAKE) dlls/nfs/$@
.PHONY: all install install-lib clean
如果要在user32模块中调用新加的DLL中的函数,编辑dlls/user32/Makefile.in文件,将nfs加到IMPORTS后。
IMPORTS = $(PNG_PE_LIBS) gdi32 sechost advapi32 kernelbase win32u nfs
dlls/user32/win.c文件中, 声明一下Test_In_CreateWindowEx方法,然后在WIN_CreateWindowEx方法内就可以直接调用了。