MFC调用C动态库函数-----待补充

界面用MFC写 后台用写好的C程序就行了

C写的程序编译为dll,把用到的功能做成导出函数,在C++ w/MFC程序中调用

1、VC可以编译C函数动态库;

2、简单的dll编写例子(以最简单的两数相加函数为例):

创建工程项目Win32 Dynamic-Link Library.

加入头文件及源文件比如dll.h dll.cpp,

在头文件中:
#ifndef DLL_H
#define DLL_H
extern "C" int __declspec(dllexport)add(int x, int y);
#endif
在源文件中:
#include "dll.h"
int add(int x, int y)
{
    return x + y;
}
3、dll的简单调用:
#include <stdio.h>
#include <windows.h>
typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
int main(int argc, char *argv[])
{
    HINSTANCE hDll; //DLL句柄 
    lpAddFun addFun; //函数指针
    hDll = LoadLibrary("..\\Debug\\dll.dll"); //这个是你上个工程dll所在的路径,当然你可以直接把DLL拷贝到当前工程,这样直接写hDll = LoadLibrary("dll.dll");
    if (hDll != NULL)
    {
        addFun = (lpAddFun)GetProcAddress(hDll, "add"); 
        if (addFun != NULL)
        {
            int result = addFun(2, 3);
            printf("%d", result);//MFC里面改成AfxMessageBox进行测试
        }
        FreeLibrary(hDll); //用完最后别忘记释放
    }
    return 0;
}

时间: 2024-10-22 21:16:32

MFC调用C动态库函数-----待补充的相关文章

C# 中动态调用C++动态链接

之前的文章中讲述过从DLL中导出变量,其中包括了静态加载和动态加载. C#调用C++动态链接库同样分为静态加载和动态加载. fellen的博客"WPF中使用MFC动态链接库(dll)函数"中讲述的是如何C#静态加载DLL,即需要将C++代码编译生成的Dll放在C#程序的Bin目录下,并在引入函数的位置加入[DllImport("xxx.dll")] . 由于Dll路径的限制,使用的不是很方便,C#中我们经常通过配置动态的调用托管Dll,例如常用的一些设计模式:Abs

嵌入式 Linux C语言(十)——静态库函数和动态库函数

嵌入式 Linux C语言(十一)--静态库函数和动态库函数 一.静态链接库 静态链接库是obj文件的一个集合,通常静态链接库以".a"为后缀,名字格式一般为libxxx.a,由程序ar生成.静态链接库是在程序编译过程中链接的,已经将调用的相关函数拷贝到程序内部,程序运行时和静态链接库已经没有任何关系. 1.静态链接库的创建 A.编写源码库文件 源码库文件一般包含.c和.h文件, hello.c文件: #include <stdio.h> void display(void

C#调用C++动态库

1.若C#调用VC的动态库,而dll中使用了MFC则须将MFC静态链接到dll中. 2.C#调用C++的动态库有三种方法:COM组件.托管代码.非托管代码. COM组件需客户端注册,若客户无管理员权限则无法使用: 托管代码可以将dll中的类导出,但需要写托管代码,添加工作量且代码看上去有点**: 非托管代码不能导出dll中的类,只能导出函数,但好处是dll比较正统,可以给C/C++/C#使用. 3.C#调用C++动态库时需留意参数传递问题,dll中的接口字符串类型最好用char*. 4.传入参数

调用 C 动态库

调用 C 动态库 由 王巍 (@ONEVCAT) 发布于 2015/11/04 C 是程序世界的宝库,在我们面向的设备系统中,也内置了大量的 C 动态库帮助我们完成各种任务.比如涉及到压缩的话我们很可能会借助于 libz.dylib,而像 xml 的解析的话一般链接 libxml.dylib 就会方便一些. 因为 Objective-C 是 C 的超集,因此在以前我们可以无缝地访问 C 的内容,只需要指定依赖并且导入头文件就可以了.但是骄傲的 Swift 的目的之一就是甩开 C 的历史包袱,所以

LINUX下c语言调用math.h库函数的注意事项

在Ubuntu上做C语言程序练习时,用到了sqrt函数,尽管在源文件中已包含了math.h头文件,但在编译的时候总是提示sqrt未定义.后来在网上查阅了相关资料,得知:在Linux系统下,C源文件若调用了math库里的函数,则编译时要加上-lm(是字母l,不是数字1),表示链接到math库.例如编译调用了math库函数的C源文件foo.c,可以用如下命令对其进行编译: $gcc -o foo -g -W foo.c -lm

JNI java 调c++动态库函数,多值回传及乱码问题

一,JNI java 调c++动态库函数的问题 1.多参数回传 2.参数传递出现乱码 二,解决 1.使用byte[]数组传入c++,在生成的头文件里就会变成jbyteArray 类型 例如,java 中参数:byte[]account,头文件里参数变成jbyteArray account, 通过c++修改完account的值后,java要获取该值,直接使用 jbyte* jbAccount = (env)->GetByteArrayElements(env, account, 0); char*

Dubbo服务调用的动态代理和负载均衡

Dubbo服务调用的动态代理及负载均衡源码解析请参见:http://manzhizhen.iteye.com/blog/2314514

可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)

MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 [cpp] view plaincopyprint? #include <qmfcapp.h> #include <qwinwidget.h> #include <QtGui> #include <QtGui/QMessageBox> #include <windows.h> #include <QTextCodec> [cpp] view

是不是可以在C# 中调用C++动态链接

好了,现在您可以测试Add程序了,是不是可以在C# 中调用C++动态链接了,当然这是静态调用,需要将CppDemo编译生成的Dll放在DllDemo程序的Bin目录下 二. C# 中动态调用C++动态链接 在第一节中,讲了静态调用C++动态链接,由于Dll路径的限制,使用的不是很方便,C#中我们经常通过配置动态的调用托管Dll,例如常用的一些设计模式:Abstract Factory, Provider, Strategy模式等等,那么是不是也可以这样动态调用C++动态链接呢?只要您还记得在C+