Wine源码中添加新的DLL模块

Wine源码中添加新的DLL模块

1. 基础环境准备

编译环境:debootstrap 安装 debian bullseye
源码版本:Wine 9.0-rc4
基础环境搭建

2. 创建DLL模块目录

在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

3. 修改配置文件

将源码根目录下的 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
...

4. 验证配置文件

执行./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

5. 其它模块调用

如果要在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方法内就可以直接调用了。

你可能感兴趣的:(Wine,linux)