beyondjhf_2008 发表于 2013-2-4 20:20:50

VC6中dll的创建和使用

一直很好奇C++的Dll是个什么东西...
最近终于知道了..

1.创建project
选择Win32 Dynamic Link Library,然后 OK, 然后 选择带一个例子的那个 project
2.写一个简单的方法
在project中可以看到已经创建好的4个文件.
dlltest.cpp   StdAfx.cppdlltest.hStdAfx.h
先在dlltest.h 中生命自己要写的方法
Java代码
#ifdef DLLTEST_EXPORTS   
#define DLLTEST_API __declspec(dllexport)   
#else
#define DLLTEST_API __declspec(dllimport)   
#endif   



DLLTEST_API int add(int a,int b);

#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif



DLLTEST_API int add(int a,int b);


然后去dlltest.cpp 中实现之
Java代码
#include "stdafx.h"
#include "dlltest.h"

BOOL APIENTRY DllMain( HANDLE hModule,   
                     DWORDul_reason_for_call,   
                     LPVOID lpReserved   
                     )   
{   
    switch (ul_reason_for_call)   
    {   
      case DLL_PROCESS_ATTACH:   
      case DLL_THREAD_ATTACH:   
      case DLL_THREAD_DETACH:   
      case DLL_PROCESS_DETACH:   
            break;   
    }   
    return TRUE;   
}   



DLLTEST_API int add(int a,int b)   
{   
    return a+b;   
}

#include "stdafx.h"
#include "dlltest.h"

BOOL APIENTRY DllMain( HANDLE hModule,
                     DWORDul_reason_for_call,
                     LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
    }
    return TRUE;
}



DLLTEST_API int add(int a,int b)
{
return a+b;
}

这样dll就算是写完了,build 一下.
3.使用Dll
去dlltest的文件目录下的debug中,把dlltest.dll 和 dlltest.lib 复制到目标程序中,然后把 dlltest.h 也复制到目标程序中.

在目标程序 testdll.cpp 中
Java代码

#include "dlltest.h"
#include <stdio.h>   

int main(){   
    int c=add(3,5);   
    printf("%d\n",c);   

    return 0;   
}


#include "dlltest.h"
#include <stdio.h>

int main(){
int c=add(3,5);
printf("%d\n",c);

return 0;
}



这样build.没有错误..但是运行会提示错误..
在该project的 settings 中 的 link 标签页 中间 那行 Object/Library modules: 中添加dlltest.lib 。
然后build.然后运行..

现在已经可以成功使用dll了.

ps:微软的东西真是麻烦...
页: [1]
查看完整版本: VC6中dll的创建和使用