Windows使用GCC调用DLL内部的类

原创 2007年10月12日 11:19:00
 
IDEDEV-C++
GCC 4.1.2
需要以下步骤:
1.
DLL工程的 XX.a,XX.def,XX.dll 以及类的头文件拷贝到工程文件夹
2.
工程包含类的头文件
3.
工程选项”-参数”-连接器增加XX.a库文件
4.
调用:与类调用相同

注:在DLL工程头文件需要增加宏定义
1.#ifdef _MS_WINDOWS_
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
    #else
     #define DLLIMPORT
    #endif
 2.在“工程选项”-》“参数”-》“C++编译器”增加 -D_MS_WINDOWS_
 3.在调用工程的“工程选项”-》“参数”-》“C++编译器”增加 -D_MS_WINDOWS_
 
源代码:
//DLL.H
#ifndef _DLL_H_
#define _DLL_H_
#ifdef _MS_WINDOWS_
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
#else
     #define DLLIMPORT
#endif
#include <string>
using namespace std;
class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);
    string kk;
   
  private:
};

#endif /* _DLL_H_ */
//DLL.CPP
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
DllClass::DllClass()
{
    kk = "aaaaaaaaaa";
}

DllClass::~DllClass ()
{
}

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
/**********************************************************************/
//USEDLL.CPP
#include <cstdlib>
#include <iostream>
#include "dll.h"
using namespace std;
int main(int argc, char *argv[])
{
    DllClass dc;
    cout << dc.kk << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
RUN: 
 

Windows下GCC使用dll

 一、1、如果不存在dll的.lib文件           1) 使用impdef(http://mirrors.zoreil.com/webclub.kcom.ne.jp/ma/colinp/gc...
  • cityvagrant
  • cityvagrant
  • 2006-05-26 09:37:00
  • 986

gcc编译dll和调用dll

方法一: 共有三个文件:print.h,print.c,test.c ***************************************************************pr...
  • denglei265
  • denglei265
  • 2009-02-14 10:36:00
  • 18333

MinGW gcc 生成动态链接库 dll 的一些问题汇总

网络上关于用 MinGW gcc 生成动态链接库的文章很多。介绍的方法也都略有不同。这次我在一个项目上刚好需要用到,所以就花了点时间将网上介绍的各种方法都实验了一遍。另外,还根据自己的理解试验了些网上...
  • liyuanbhu
  • liyuanbhu
  • 2015-01-11 17:25:51
  • 19292

对Windows下动态库和静态库的总结

对Windows下的动态库编程并不很熟悉。下午利用一点时间写了个原型,过程中想到许多问题,网上搜到许多文章,学到不少知识,但感觉比较繁杂,于是决定理一理,就有了这篇博文。...
  • nirendao
  • nirendao
  • 2016-01-24 00:29:35
  • 1698

VC、GCC 之间DLL 的相互调用

2012-08-30 15:56:51|  分类: GCC VC Dll相互调|字号 订阅 http://argv.info/2011/01/26/some-prob...
  • funkri
  • funkri
  • 2013-01-28 21:06:52
  • 4794

MinGW gcc 编译、调用dll

MinGW是Minimalist GNU for Windows, 是在windows平台上做开发的gcc工具集合,支持几乎所有的windows API,几乎可以说是VC的替代, 不过因为GCC原本...
  • u012842205
  • u012842205
  • 2015-07-09 18:01:45
  • 3090

用gcc编译生成动态链接库*.so文件的方法。

linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 ...
  • ngvjai
  • ngvjai
  • 2013-01-19 21:14:07
  • 11126

linux动态库的初始化和清理

a. Windows 中有 DllMain 入口函数, 而 Linux 中则没有。    b. Linux 中有特殊函数 _init 和 _fini, 主要是分别用来初始化函数库和关闭的时候 ...
  • wind19
  • wind19
  • 2014-08-07 16:25:43
  • 4968

GCC for windows HelloWorld

1.下载 https://sourceforge.net/projects/mingw/files/latest/download?source=files 或者搜索 gcc for windows...
  • osummertime
  • osummertime
  • 2018-03-26 15:21:12
  • 8

GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分。 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影...
  • benpaobagzb
  • benpaobagzb
  • 2016-05-10 16:07:47
  • 8155
收藏助手
不良信息举报
您举报文章:Windows使用GCC调用DLL内部的类
举报原因:
原因补充:

(最多只允许输入30个字)