欲完成此次操作c;必需有vc编译器cl.exe和连接器link.exe。我电脑上已经安装了vs2010c;使用的是vs自带的命令提示工具:
c="https://img-blog.csdn.net/20140904212215094?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjg0MjIwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
这三个工具(目前还不知道有什么区别c;可能都差不多c;不过名字可以看出一点差别的c;“兼容”)
1、先制作dll文件
<code class="language-cpp">#include <stdio.h> //#include <class="tags" href="/tags/WINDOWS.html" title=windows>windows.h> void ftest(char* _str){ printf("%s\n",_str); } code>
之后编写def 文件(demo.def)c;此文件指定了要导出什么函数:
<code class="language-plain">LIBRARY demo EXPORTS ftest @1code>
连接两个文件: link /def:demo.def /dll demo.objc;之后会在当前路径出现三个文件:demo.dll(动态链接库)c;demo.lib(静态连接库)c;demo.exp(打包文件c;此文件不熟悉)
这样就得到我们想要的动态链接库了!
2、调用动态链接库
此处使用了运行时动态加载的方法c;运行在class="tags" href="/tags/WINDOWS.html" title=windows>windows平台下c;代码如下:
<code class="language-cpp">#include <stdio.h> #include <class="tags" href="/tags/WINDOWS.html" title=windows>windows.h> //void ftest(char* _str){ // printf("%s\n",_str); //} int main(int argc,char** argv){ HINSTANCE hMod=LoadLibrary("C:\\demo.dll"); // dll路径视具体情况而定! if(hMod!=INVALID_HANDLE_VALUE){ typedef int (_stdcall* FXN)(char*); // 定义指针 FXN f=(FXN)GetProcAddress(hMod,"ftest"); f("hello ,world!!!"); } return 0; }code>
编译后就能看到结果了!在屏幕上打印"hello ,world!!!"字符!
注意:编译器和连接器的路径一般是在vs安装路径下