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: 
 

gcc编译dll和调用dll

方法一: 共有三个文件:print.h,print.c,test.c ***************************************************************pr...
  • denglei265
  • denglei265
  • 2009年02月14日 10:36
  • 17464

MinGW gcc 编译、调用dll

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

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
  • 4565

gcc编译链接库并调用链接库的方法

linux系统下gcc编译静态链接库和动态链接库的方法
  • u010851789
  • u010851789
  • 2016年01月06日 14:21
  • 1004

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

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

MinGW gcc 编译、调用dll

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

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

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

Linux下gcc编译控制动态库导出函数小结

根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hid...
  • wind19
  • wind19
  • 2014年03月13日 19:07
  • 4320

MinGW-GCC 如何编译JNI程序进阶

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Jav...
  • u010605082
  • u010605082
  • 2016年03月18日 17:00
  • 1569

windows下生成jni的dll文件(java native方法)

编写java类, 类中有一个native方法。public class Hello { public native void sayHello(); static { ...
  • Azure_Sky_2014
  • Azure_Sky_2014
  • 2017年05月14日 06:44
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows使用GCC调用DLL内部的类
举报原因:
原因补充:

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