大多数可以编程的库都提供文档,头文件,lib等文件.
不过有些是不提供的.活生生只给你一个dll.
不过这时候如果知道里面函数的名字和参数啥的,就可以调用.
以ax为例,ax后缀的一般是解码器的Filter.编写过filter的都知道,其实他就是一个DLL,有些解码器就是以dll作为后缀的.
现在:我要载入RealMediaSplitter.ax这个连接库,并且运行DllRegisterServer这个无参函数.
这里仅给出一个样例.核心就是使用LoadLibrary和GetProcAddress函数,用了一个typedef来使其看起来像模像样.
if(HMODULE h = LoadLibrary(TEXT("RealMediaSplitter.ax"))) {
typedef HRESULT (__stdcall * PDllRegisterServer)();
if (PDllRegisterServer p = (PDllRegisterServer)GetProcAddress(h, "DllRegisterServer")) {
p();
}
FreeLibrary(h);
}测试结果OK.其效果等价于在终端运行regsvr32 RealMediaSplitter.ax, 但是不是绿色载入, 以后会介绍一种绿色载入的方法, 那种方法在BinPlayer中被采用, 非常安全.
No comments:
Post a Comment