当前位置:首页 > 操作系统 > Windows

Windows下C语言调用dll动态链接库

dll是windows下的动态链接库文件,下面记录一下在windows下如何调用C语言开发的dll动态链接库。

1.dll动态链接库的源代码

hello_dll.c

#include <span>"</span><span>stdio.h</span><span>"</span><span>

_declspec(dllexport) </span><span>void</span> test_print(<span>char</span><span>const</span> *<span>str)
{
    printf(</span><span>"</span><span>%s
</span><span>"</span><span>, str);
}

_declspec(dllexport) </span><span>int</span> test_add(<span>int</span> a, <span>int</span><span> b)
{
    </span><span>return</span> a +<span> b;
}</span>

上面的代码定义了两个函数,第一个函数需要传入一个字符串,然后打印出这个字符串,第二个函数需要转入两个int型整数,然后返回这两个整数的和。

执行 cl -LD hello_dll.c 会生成hello_dll.dll文件

 

2.main函数的源代码

test_hello_dll.c

#include <stdlib.h><span>
#include </span><windows.h>

<span>int</span> main(<span>int</span> argc, <span>char</span><span>const</span> *<span>argv[])
{
    </span><span>//</span><span> define two functional pointer</span><span>void</span>(*p_test_print)(<span>char</span><span>const</span> *) =<span> NULL;
    </span><span>int</span>(*p_test_add)(<span>int</span>, <span>int</span>) =<span> NULL;

    </span><span>int</span><span> add_result;

    </span><span>//</span><span> load dll file, require window.h file</span>
    HMODULE module = LoadLibraryA(<span>"</span><span>hello_dll.dll</span><span>"</span><span>);
    </span><span>if</span> (module ==<span> NULL) {
        system(</span><span>"</span><span>error load</span><span>"</span><span>);
    }
    p_test_print </span>= (<span>void</span>(*)(<span>char</span><span>const</span> *))GetProcAddress(module, <span>"</span><span>test_print</span><span>"</span><span>);
    p_test_add </span>= (<span>int</span>(*)(<span>int</span>, <span>int</span>))GetProcAddress(module, <span>"</span><span>test_add</span><span>"</span><span>);
    </span><span>if</span> (p_test_print !=<span> NULL) {
        p_test_print(</span><span>"</span><span>Hello This is from dll</span><span>"</span><span>);
    } </span><span>else</span><span> {
        system(</span><span>"</span><span>function p_test_print can not excute</span><span>"</span><span>);
    }
    </span><span>if</span> (p_test_add !=<span> NULL) {
        add_result </span>= p_test_add(<span>5</span>, <span>5</span><span>);
        printf(</span><span>"</span><span>Add result is %d
</span><span>"</span><span>, add_result);
    } </span><span>else</span><span> {
        system(</span><span>"</span><span>function p_test_print can not excute</span><span>"</span><span>);
    }
    FreeLibrary(module);
    system(</span><span>"</span><span>pause</span><span>"</span><span>);
    </span><span>return</span><span>0</span><span>;
}</span>

执行 cl test_hello_dll.c 会生成test_hello_dll.exe的可执行文件。

运行该文件,可以成功调用dll文件中定义的函数。

原文:http://www.cnblogs.com/shizqiang/p/5523824.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐