精华内容
参与话题
问答
  • 动态链接库C++的Mat转入C#

    千次阅读 2019-02-21 11:10:44
    C++代码 extern "C" _declspec(dllexport) void Getmat(uchar *data,size_t &size) { vector<uchar>buf; Mat img = imread("D:\\1.jpg");//读入图片 imencode("...

     C++代码

    extern "C" _declspec(dllexport) void Getmat(uchar *data,size_t &size)
    {
    	vector<uchar>buf;
    	Mat img = imread("D:\\1.jpg");//读入图片
    	imencode(".bmp", img, buf);   //将Mat以BMP格式存入uchar的buf数组中
    	size = buf.size();
    	for each(uchar var in buf)    //将buf拷贝到C#的byte[]中
    	{
    		*data = var;
    		data++;
    	}
    }

    C#代码

    [DllImport("mydll.dll")]
    public static extern void Getmat(ref byte data,out ulong size);
    
    public Form1()
            {
                InitializeComponent();
                byte[] imgdata = new byte[3200 * 2400 * 3];//存储图片的数组,必须大于等于图片分辨率
                ulong size = new ulong();
                Getmat(ref imgdata[0], out size);
                pictureBox1.Image = Image.FromStream(new MemoryStream(imgdata, 0, (int)size));
            }

     

    展开全文
  • Mac下创建和使用动态链接库 C++

    千次阅读 2018-02-24 19:57:40
    最近研究动态链接库,搞了半天才明白Mac下的动态链接库格式是*.dylib,创建动态库需要用xcodexcode &gt; 文件 &gt; 新建 &gt; 项目 &gt; MacOS &gt; 库 ,然后按照图片上进行修改,注意...

    最近研究动态链接库,搞了半天才明白

    Mac下的动态链接库格式是*.dylib,创建动态库需要用xcode

    xcode > 文件 > 新建 > 项目 > MacOS > 库 ,然后按照图片上进行修改,注意framework和type两项设置


    然后右击项目,选择NewTarget,再添加一个c++和一个头文件,这里以求和为例

    //Demo.h
    #ifndef __DEMO_H__
    #define __DEMO_H__
    
    int add(int a, int b);
    
    #endif
    //Demo.cpp
    #include "Demo.h"
    
    #define EXPORT __attribute__((visibility("default")))
    
    EXPORT
    int add(int a, int b) {
        return a + b;
    }

    int add(int a, int b)

    点击左上角的三角,就生成了一个动态库

    然后右击products下的libdemo.dylib,选择在Finder中打开,把文件拷到任意一个目录,再把项目中的Demo.h头文件拷到和动态库相同的目录就ok了

    下面是如何使用:

    创建一个普通控制台应用,在General中最底部linked frameworks and libraries中添加libdemo.dylib,再在build phases中选择+,选new copy files phase,然后在destination中改成frameworks,再点右下角的+添加动态库,至此,项目配置完毕,然后再添加接口demo.h就可以了。

    //Demo_app.cpp
    #include <iostream>
    #include "Demo.h"
    
    int main(){
        int a = 3;
        int b = 2;
        cout << result: << add(a, b) << endl;
        return 0;
    }

    运行一下:“result:5”

    谢谢大家!

    展开全文
  • vs2019 开始自己的第一个C++程序

    万次阅读 多人点赞 2019-03-16 21:09:43
    还不想使用vs2019的用户可以看博主的vs2017这篇博客:vs2017安装和使用教程(详细)里面涵盖了大...这是针对于以上安装教程的C++项目新建示例,与vs2017稍有不同,旨在示范从项目搭建到程序运行的简单流程,代码就...

    还不想使用vs2019的用户可以看博主的vs2017这篇博客:vs2017安装和使用教程(详细)里面涵盖了大部分编程语言和项目的示例,从初学vs算法设计面向对象深度学习部分,带领大家使用vs2017


    vs2019安装教程(里面有下载地址):vs2019安装和使用教程(详细)

    这是针对于以上安装教程的C++项目新建示例,与vs2017稍有不同,旨在示范从项目搭建到程序运行的简单流程,代码就是打印Hello World,适合初次使用vs2019的用户~


    如果对于算法设计与分析感兴趣的可以订阅我的专栏:算法设计与分析


    vs2019MFC使用博主也提供了十分详细的范例,博客为:

    vs2019 MFC实现office界面的画图小项目(超超级详细)


    一、新建项目

    1.点击菜单栏-->文件-->新建-->项目,我们可以看到上方存在的语言平台项目类型的选项

    (1)语言这里我们就选择C++,或者所有语言

    (2)平台这里我们就选择windows,或者所有平台

    (3)项目类型这里选择控制台,或者所有项目类型

    博主这里以C++为例,选择空项目,我们来写一个简单的打印hello world的程序

    2.改变默认路径,填写项目名称,可勾选将解决方案和项目放在同一目录中

    3.可以看到并且可以看到项目结构:

    • 引用
    • 外部依赖项 
    • 头文件
    • 源文件
    • 资源文件

                                                                 

    3.右键源文件,点击“添加-->新建项”,改名(我这里是main.cpp),点击添加

    4.生成以下界面

    二、代码演示

    1.在main.cpp中输入代码

    #include<stdio.h>
    
    int main() {
    	printf("hello world!!");
    	getchar();
    	return 0;
    }

    2.点击“本地Windows调试器”,运行结果

    3.按下任意键,退出

    4.最近比较忙,评论区里回复博主也仔细看了看,确实有一些简单(>_<),所以稍微增加一些代码。博主现在添加了一个for循环,并且输出了打印”Hello world!!”次数,但是如果想用双引号强调输出的内容,则需要利用转义"\"来输出。C++中所有的特殊字符都可以通过添加转义符"\"来输出。如果想单独输出双引号则可以

    std::cout << "\""

    输出”hello world!!”次数main.cpp如下

    #include<stdio.h>
    #include<iostream>
    int main() {
    	int number = 0;
    	printf("1 hello world!!\n");
    	number++;
    	int n = 3;
    	for (int i = 0; i < n; i++) {
    		std::cout << i + 2 << " "<< "hello world!!" << std::endl;
    		number++;
    	}
    	std::cout << "一共打印了" << number << "个""\"hello world!!""\"" << std::endl;
    	getchar();
    	return 0;
    }

    5.运行结果 


    对于新手,稍微有些难度的地方来了

    6.程序里每次输入代码都要输入“hello world!!”这太麻烦了。因此我们可以定义一个字符指针指向这个字符串const指的是常量

    const char* s ="hello world!!";

    7.如何输出这个整个字符串呢?我们可以直接这么写,相当于现在指针*s指向"h"这个字母的地址,也就是首地址,就是只有知道它才会知道整个字符串

    	std::cout << s << std::endl;

    而如果是下面这样,则是指输出s指向的位于这个地址的变量,也就是一个字符“h”,因此只输出一个“h”

    	std::cout << *s << std::endl;

     8.那如果我想输出字符串中第二个字符呢?如果我们这么写,则是输出了"h"ASCII码表中的下一个,也就是"i",这个输出结果为105这显然是不对的!

    但是为什么输出的是数字呢?因为这里+1操作只有像int类型的变量才能+1,因此这里相当于变成了数字104+1=105

    	std::cout << *s + 1 << std::endl;

    如果想输出字符,则需要在前面加一个(char),强制类型转换字符型

    	std::cout << *s + 1 << "为" << (char)(*s + 1) << std::endl;

    ASCII码表如下,可以看到"h"ASCII码104"i"ASCII码105

    因此输出第二个字符的正确写法应该是这样的,注意括号的位置,这里相当于指针指向的位置向后移

    	std::cout << *(s + 1) << std::endl;

    9.最终main.cpp整体代码如下

    #include<iostream>
    int main() {
    	int number = 0;
    	const char* s ="hello world!!";
    	std::cout << "字符串首字母是""\"" << *s << "\"" << std::endl;
    	std::cout << "字符串首字母在ASCII码中的下一个是""\"" << *s + 1 << "\"" <<",为""\"" << (char)(*s + 1) <<"\""<< std::endl;
    	std::cout << "字符串第二个字母是""\"" << *(s + 1) << "\"" <<std::endl;
    	std::cout << number++ << " " << s << std::endl;
    	int n = 3;
    	for (int i = 0; i < n; i++) {
    		std::cout << i + 2 << " "<< s << std::endl;
    		number++;
    	}
    	std::cout << "一共打印了" << number << "个""\"" << s <<"\"" << std::endl;
    	getchar();
    	return 0;
    }

    10.运行结果


    应评论区要求,这里提及一下指针数组

    11.指针数组的使用也是学习C++的一项任务。先放代码,目的是把hello world!!这个字符串分别逐字符地顺序输出逆序输出

    #include<iostream>
    
    int main() {
    	const char *p[13] = { "h","e","l","l","o"," ","w","o","r","l","d","!","!"};
    	for (int i = 0;i<13;i++)
    	{
    		std::cout << p[i];
    	}
    	std::cout << std::endl;
    	for (int i = 12; i >= 0; i--)
    	{
    		std::cout << p[i];
    	}
    	return 0;
    }

    12.这里的*p[13]相当于有13个指针分别指向hello world!!这个字符串的每一个字符,用for循环顺序和逆序遍历一下,结果如为:


    返回至原博客:vs2019安装和使用教程(详细)

    展开全文
  • 动态链接库在企业级开发中无处不在,本课程包含Windows动态链接库相关知识点,通过浅显易懂的代码与讲解,让你熟悉掌握动态链接库技术!
  • 动态链接库导出C++

    千次阅读 2011-05-22 17:32:00
    首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL.由于该类会被工程之外的文件所引用,所以需要对这个类进行引出。因为只有引出后所生成的DLL中才带有供足够的信息以在连接和...

    首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL.由于该类会被工程之外的文件所引用,所以需要对这个类进行引出。因为只有引出后所生成的DLL中才带有供足够的信息以在连接和运行时被正确引入到进程空间中。有两种方法可以引出类,使用__declspec(dllexport)定义和使用定义文件。

      下面先讲使用__declspec(dllexport)的方法:将类定义改为:class __declspec(dllexport) CInDLL 就可以了。 这样产生的工程在编译时是正确的但是在使用时会产生错误,因为你包含的头文件中也是使用__declspec(dllexport),而使用这个DLL的工程中并没有引出这个类,而是需要引入这个类)在使用时需要将类定义改为class __declspec(dllimport) CInDLL就可以了。

      使用定义文件可以有效的避免这个问题, 这种方法是利用宏定义在不同的地方产生不同的编译代码:

      在头文件中加入如下的代码:

      #ifndef ClassInDLL_H

          #define ClassInDLL_H

         #ifdef _CLASSINDLL

      #define CLASSINDLL_CLASS_DECL __declspec(dllexport)

      #else

      #define CLASSINDLL_CLASS_DECL __declspec(dllimport)

      #endif

      #endif // ClassInDLL_H

      //将class __declspec(dllexport) CInDLL改为

    class CLASSINDLL_CLASS_DECL CInDLL

      {

      CInDLL()

      ……

      }

      在实现这个类的CPP文件的顶部加入#define _CLASSINDLL语句,然后include头文件。

     

      #define _CLASSINDLL

         #include "CInDLL.h"

         CInDLL::CInDLL(){}……

      这样一来在使用这个类时就可以不做任何改动了。

    在使用这个类的工程中添加这个类的头文件,并设置或者动态链接.lib文件

    展开全文
  • C/C++ 开发神器 CLion 使用入门

    万次阅读 多人点赞 2018-10-23 14:18:19
    CLion是Jetbrains公司旗下新推出的一款专为开发C/C++所设计的跨平台IDE,它是以IntelliJ为基础设计的,同时还包含了许多智能功能来提高开发人员的生产力。 同样支持python哦,相信使用过IntelliJ idea开发过java的...
  • VB调用C++动态链接库

    2015-06-14 11:45:19
    现在有个C++动态链接库,有头文件,但是我想在VB里面调用。怎么在VB里面调用啊、麻烦帮忙把下面的3个函数转成能在VB里面用的语句。 之前没接触过VB,现在因为时间紧,需要临时突击下。麻烦帮忙解答下啊。 #ifndef ...
  • C++ 动态链接库和静态链接库

    千次阅读 2016-05-06 18:19:21
    在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。  静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若...
  • C++静态链接库与动态链接库理解

    千次阅读 2019-06-23 14:35:59
    原文:...看到一篇介绍静态链接库和动态链接库的文章,写的太好了,遂转载过来分享一下。 这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道...
  • 如果动态链接库发布x64版本,中文的路径和文件名都正常,可是如果动态链接库发布86版本,传递过去的字符串如果带有中文路径就会出现乱码,而如果只是中文文件名,。目录是英文和数字,就正常。 据我所知系统位数不会...
  •  一、创建动态链接库1、创建工程new-&gt;project-&gt;c++ project选择Shared Library-&gt;Empty Project.输入工程名a,点击finish,完成工程的创建。  2、编写代码在windows下封装动态链接库时对要封...
  • C++动态链接库DLL-非MFC动态库

    千次阅读 2015-10-14 19:46:43
    而库文件一般又分为静态链接库(.lib)和动态链接库(.DLL)。如果采用静态链接库,则lib中的指令代码都将包含在最终生成的exe文件中。若是使用动态链接库,则其代码不会包含在EXE中,可以动态的装载和卸载DLL文件。...
  • Qt调用C++动态链接库

    千次阅读 2018-09-14 16:09:54
    最近在学习Qt调用C++模块的方法,本文在结合几篇文章的基础上,完成了Qt调用C++动态链接库(Dll)的方法,亲测有效: 声明: 事先我已经用C++写了一个简单的dll文件(myCurve.dll)。首先,从dll中导出了导入库(.lib...
  • 创建和使用动态链接库 (C++)

    千次阅读 2008-12-08 18:51:00
    我们将创建的第一种类型的库是动态链接库 (DLL)。使用 DLL 是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。 本演练...
  • C++动态链接库的制作

    千次阅读 2018-05-12 19:13:58
    输入函式__declspec(dllimport) 与输出函式__declspec(dllexport) 有什么区别呢?我知道他们不同,但差别在哪呢?我用的全是__declspec(dllexport) , __declspec(dllimport)一般在什么时用呢?...
  •  由于项目中要用到java调用C++文件,于是需要在linux下编译连接生成动态库,然后根据Recast官方包要先CMake生成编译,然后在包含到自己实现的文件,网上查了半天,坑爹没有全面的,东拼西凑终于才明白原理,...
  • Python调用C++动态链接库

    千次阅读 2018-08-09 08:50:47
    目的:实现python调用C++动态链接库 1、安装VS2010,或者以上的版本 2、创建win32应用程序,应用程序类型选择DLL。由于python是64位的,因此需要将win32程序设置为X64,即64位的。 3、编写程序Add.cpp 4、编写...
  • C++ 动态链接库的动态加载问题

    千次阅读 2018-07-26 11:06:23
    1、如何使用显示加载动态链接库 加载方法: LoadLibrary GetProcAddress FreeLibrary #include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; #pragma comment(lib, &...
  • C++ 打包并调用动态链接库 (VS2010)

    千次阅读 2017-04-06 21:14:25
    相比于源码,动态链接库使用起来更加方便简洁,而且可以对源代码起到保护作用。生成动态链接库 我们以vs2010为例,生成一个动态链接库,首先在VS2010中新建一个项目,选择“Win32控制台应用程序“或“Win32项目”都...
  • C#调用C++动态链接库

    千次阅读 2018-12-25 18:37:53
    将静态链接库做成动态链接库新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants...
  • C++_编写动态链接库

    万次阅读 2015-08-17 21:54:02
    动态链接库简介动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll”、”.ocx”(包含...
  • c++动态链接库调试设置

    千次阅读 2016-11-09 23:06:21
    开发动态库程序,需要对动态库进行调试,那么我们该如何启用我们的动态库调试程序呢? VC6中我们可以通过工程-->设置来设置一个exe应用程序调用我们的动态库,那么VS呢? 下面用图解的方法说明步骤: 在...
  • C++动态链接库测试实例

    千次阅读 2015-12-08 15:08:44
    前话上一章节我导出了一个动态链接库要使用该链接库,我们还需要该链接库对外公开的函数,即头文件下面开始实例测试实例第一步——将动态链接库的dll、lib、和头文件导入项目中文件目录如下:项目目录如下:第二步...
  • 我用MFC制作了一个DLL动态链接库,然后用另外一个MFC程序区调用它,但是没有效果。其程序如下: 制作一个MFC生成DLL程序,改DLL内部封装了一个函数。如下(.cpp文件): int sum(int a,int b) { char temp[200];...
  • c++ 调用matlab 动态链接库

    千次阅读 2014-09-20 20:17:13
    贴一下别人的。

空空如也

1 2 3 4 5 ... 20
收藏数 1,258,319
精华内容 503,327
关键字:

动态链接库