创建dll

在制作dll的时候,如果全局变量不导出,而函数调用中,包含了全局变量,那么会出现全局变量没有值的问题。

add.c

#pragma once

//强制无签名utf-8
#include "add.h"

pStu student;//全局变量

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

void test1(pStu p){

    if (p == NULL){
        printf("------1------\n");
    }
    //全局变量怎么处理
    if (student == NULL){
        printf("------2------\n");
    }
    else{
        printf("ok\n");
    }
}

add.h

#ifndef _ADD
#define _ADD
#include <stdio.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifdef SAMPLEDLL_EXPORTS
#define DLL_DECLARATION __declspec(dllexport)
#else
#define DLL_DECLARATION __declspec(dllimport)
#endif
#define  aMAX(a, b)  ((a)>(b) ? (b) : (a))
    DLL_DECLARATION int add(int a, int b);
    DLL_DECLARATION void dis();

    int num;
    typedef struct {
        int age;
        char *p;
    }STU,*pStu;
    extern  pStu DLL_DECLARATION student;//导出全局变量
    DLL_DECLARATION void test1(pStu p);
#ifdef __cplusplus
}
#endif

#endif

调用:

test.c

#include <stdio.h>

#include "add.h"
#pragma comment(lib,"makeADll.lib")

int func(int n){
    printf("%d\n", num);
    return n;
}

int main(){
    num=add(1, 1);
    int a = func(num);
    student = malloc(sizeof(STU));
    student->age = 10;
    test1(student);
}

具体参照:http://www.cnblogs.com/lidabo/p/3501358.html

下面导出类,还没有实践。

类:在dll中定义:

在定义的时候用 class _declspec(dllexport) classname{

}

在类中引用的时候用

加入类定义头文件:#include “classname.h”

Class _declspec(dllimport) classname 来导入类

时间: 2024-07-30 23:17:15

创建dll的相关文章

MinGW 使用和创建 DLL 应注意的问题

MinGW 是 GCC 的 Windows 版本,稳定版已经到了 4.5.2,功能和性能上很好,感觉不比 Microsoft 自家的 VC 差啊.但是 MinGW 下使用和创建 DLL 倒是要特别注意,问题主要集中在 g++ 编译器(C++ 的 GNU 版本编译器)对于 DLL 的函数输入以及输出的名称修饰.调用协议上和 VC 编译器是有很大区别的. 1.MinGW 如何使用一个标准的 DLL.这里标准 DLL 指的是采用 __stdcall 调用协议.并且导出函数名称干干净净,没有函数名尾部的

【转】QT创建DLL(.so)和使用此DLL(.so)

http://blog.hehehehehe.cn/a/8750.htm 创建DLL时其工程使用lib模板[喝小酒的网摘]http://blog.hehehehehe.cn/a/8750.htm引用TEMPLATE=lib 而源文件则和使用普通的源文件一样,注意把头文件和源文件分开,因为在其它程序使用此DLL时需要此头文件在使用此DLL时,则在此工程源文件中引入DLL头文件,并在.pro文件中加入下面配置项:引用LIBS += -Lyourdlllibpath -lyourdlllibname

VS2010 C++创建DLL步骤

VS2010中 C++创建DLL图解 一.DLL的创建 创建项目: Win32->Win32项目,名称:MyDLL 选择DLL (D) ->完成. 1.新建头文件testdll.htestdll.h代码如下:#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimport) #else#define MYLIBDLL extern "

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解决方案的编程环境是C#模式,这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用. 一:创建C#控制台应用程序:用于调用C++编写的DLL (1)启动VS2015>文件>新建>项目,在弹出的新建项目对话框中按下图进行选择填写,先填写项目的名称,再修改解决方案的名称. (2)项

VS2010环境下用ANSI C创建DLL和使用方法(转)

源:VS2010环境下用ANSI C创建DLL和使用方法 1. 创建DLL工程 1.1 启动VS 2010 1.2 创建一个dll工程. 操作:a.文件->新建->项目->Win32控制台应用程序. b.输入工程名称,这里我们用dll,点击确定按钮. c.点击下一步,在"应用程序设置界面设置"勾选DLL(D)项和空项目,点击完成按钮. d.视图->解决方案资源管理器,右键点击"头文件",添加->新建项,这里咱们用dll.h 右键点击&q

在VS2015中用C++创建DLL并用C++调用且同一时候实现对DLL的调试

一:用C++创建DLL? ?? ? ? ? ?依照[在VS2015中用C++编写可被其他语言调用的动态库DLL]提示创建C++编写的DLL.或參考[在VS2015中用C++创建DLL并用C#调用且同一时候实现对DLL的调试]中的步骤二:用C++创建DLL. 二:用C++隐式调用DLL? ?? ? ? ? ? 由于是隐式调用DLL所以在Debug模式下生成DLL了.然后调用时也在Debug模式下.这样在调试时就不用赋值动态库了 ? ? ? ? 隐式调用仅在C++CallDLL.h文件里设置了lib

vs创建dll工程

1.创建工程--->Win32工程. 2.选择dll类型 3.添加代码 4.添加def定义文件 5.向def文件中添加代码 LIBRARY CnBlogsDll EXPORTS func1 func2 data1 data2 其中data1,data2,func1,func2等是需要导出的符号(函数.数据等). LIBRARY是模块定义文件必须的一部分,它告诉链接器(linker)如何命名你的DLL.EXPORTS也是模块定义文件中必须具有的一部分,这部分使得符号(数据.函数等)可以被其它应用程

delphi 创建DLL文件 及其调用和注意事项

首先创建一个DLL文件,项目自带的代码为: library ProjectPnr; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or fu

【转】VS2010中 C++创建DLL图解

转载地址:http://blog.csdn.net/g710710/article/details/7255744 一.DLL的创建  创建项目: Win32->Win32项目,名称:MyDLL 选择DLL (D) ->完成. 1.新建头文件testdll.h testdll.h代码如下: #ifndef TestDll_H_ #define TestDll_H_ #ifdef MYLIBDLL #define MYLIBDLL extern "C" _declspec(d

创建dll动态链接库,并使用java调用

参考文章:http://www.cnblogs.com/matthew-2013/p/3480296.html http://blog.csdn.net/g710710/article/details/7255744 首先探讨何为动态链接库,按照百毒百科的解释: [动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式.这些库函数的扩展名是 ".dll"