C++
文章平均质量分 67
_学而时习之_
这个作者很懒,什么都没留下…
展开
-
动态调用DLL函数有时正常,有时报Access violation的异常
typedef int (add *)(int a,int b);void test(){ hInst=LoadLibraryA("aimdtl.dll"); (FARPROC &)add=GetProcAddress(hInst,"add"); add(1,2);}按这个代码执行,add函数有时OK,有时报Access violation的异常。看到原创 2013-07-09 17:43:53 · 3177 阅读 · 0 评论 -
(转载)使用vs2019进行Linux远程开发
作者:@apocelipes本文为作者原创,转载请注明出处:https://www.cnblogs.com/apocelipes/p/10899484.html通常,当我们开发Linux程序时有两种方案:在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发虽然我自己是在Linux环境上直接进行开发的,但也有许多的人是在Windows...转载 2019-05-22 09:19:17 · 4715 阅读 · 2 评论 -
任意多边形面积的计算
1-原理介绍 原理论述1: 书中给出定理:任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。 矢量面积=三角形两边矢量的叉乘。 如下图: 按定理,多边形面积由P点与A-G的各顶点连接所构成的三角形矢量面积构成,假定多边形顶点坐标顺序为A-G,逆时针为正方向,则有如下转载 2015-10-08 15:37:29 · 15631 阅读 · 0 评论 -
Qt动态多语言的实现(VS2012开发)
Qt对于多语言提供了QTranslator的接口,只要在程序启动时进行安装,然后动态改变QTranslator的加载即可。下面是效果图(英文/简体/繁体)。选择不同的语言,界面会随着切换。这要如何实现呢?QTranslator会加载*.qm的语言档,而该文件是从*.ts转换而来的。所以我们首先要做的是制作*.ts档。步骤如下1.在项目的Resource Files的位置右击,添加新原创 2013-12-25 11:53:15 · 3156 阅读 · 2 评论 -
接口默认值引发Qt调用DLL异常
在C或C++定义接口(函数)时,有时会使用默认值,这本来是无可厚非的。因为使用默认值,可以简化调用。但在跨语言调用时,这往往会成为一个新的问题。在C#和QT中调用这样的DLL时就会有这样的问题。我将Qt调用C的DLL的sum接口的第二个参数增加了一个默认值,新的接口如下。EXPORT int sum(int a,int b=100); 如果是按常规调用这个函数,我们写成sum(1)和原创 2014-01-03 11:33:56 · 2266 阅读 · 0 评论 -
VS2012中QT资源文件qrc加载失败(Q_INIT_RESOURCE报错)
在QT中如果需要使用资源时,会用到一个qrc文件.qrc文件本质上是一个XML文件,里面描述了相应资源的位置。一般将需要引用的资源放到与main.cpp同级的目录。我用VS2012开发QT,如果按正常的情况来建立QT,会带有一个qrc文件和对就的qrc*.cpp的文件,如下图(qrcexample.qrc和qrc_qrcexample.cpp)。其中qrc_qrcexample.cpp原创 2013-12-19 10:45:34 · 12407 阅读 · 6 评论 -
360杀毒引发的DLL调用异常
由于项目需要,需要调用一款较早前开发的产品的接口。该产品是在BCB环境下开发的,提供的接口是一个DLL,是属于C++语言DLL。现在要在C#中调用,开始开发还算顺利,可是后面突然就异常了,而且异常的莫名其妙,说是HRESULT异常。按照以往调用C++DLL的经验,这个可能是目标平台不匹配引起的。我的开发环境是win7_64的,而DLL是以前XP下的x86平台开发的,所以想着可能是这个问题。立即原创 2013-12-31 16:46:35 · 2765 阅读 · 0 评论 -
C#的COM事件在C++和JAVA中触发和响应的实现
在C++中调用C#开发COM组件时,一般的接口调用都比较容易实现,但是对于COM组件中的事件,C++中要去响应却不好实现。因为C#中事件是采用委托机制,而C++中却没有委托的机制,这样就无法实现对应。那要怎么办呢?在C++中虽然没有委托的类型来对应,不过C++却可以开发ATL组件,同时里面有用到事件的映射,那么我们是不是可以应用这种机制去实现呢?进过不断的查找资料和一番努力,总算是达成了目标,原创 2013-12-13 18:07:34 · 2848 阅读 · 5 评论 -
C# 64位系统调用32位DLL异常解决办法(异常来自HRESULT :0x8007007E)
解决办法如下1、在IDE中将目标平台设置成x86(VS是在项目的属性->生成->目标平台)2、如果DLL中调用了其他的DLL,需要将其他的DLL一同编译3、有时DLL生成时会依赖于IDE,比如BCB下生成的DLL就会依赖于rtl60.bpl、vcl60.bpl、borlndmm.dll、cc3260mt.dl等几个DLL,必须要将这DLL放到一起编译4、如果无法确定到底有哪些依赖项原创 2013-10-31 17:58:40 · 9974 阅读 · 1 评论 -
数据实际空间与占用空间
在windows中,我们建立一个文件时,不论文件有多小,哪怕是1个字节,都至少会占用4kb的空间。见下图那为什么会这样呢?windows操作系统对磁盘采用分页管理方式,最小分页大小为4kb,也就是如果你的硬盘假设有100GB,那么,你的分页的个数是:(100×1000×1000)/4 个,当然了,你放入一个字符,只有1个字节的,但是他要分配到一个空间,而这个空间利用一个页大小就可以装得原创 2013-09-19 08:12:35 · 2300 阅读 · 0 评论 -
结构体的字节对齐(跨语言传参时尤为重要)
在项目开发时,结构体作为一个数据结构,非常适合用语存储某一设备或某一类事务的信息,自然的,将其用作参数也是必然的事。然而在将结构体作为参数生成DLL后,用其他语言调用时,则会有一些问题。比如在用C#调用C++的DLL时,结构体的大小就会有不一样,导到调用出问题。基于以前的BCB开发的产品,需要增加一些接口以实现新的功能,于是将相应的信息封装到了结构体中,然后传出。但是当我用C#调用时,发现怎么原创 2013-09-18 16:00:46 · 3350 阅读 · 1 评论 -
C#调用C++DLL传递结构体数组的终极解决方案
在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了。但是当传递的是结构体、结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应。这时怎么办,第一反应是C#也定义结构体,然后当成参数传弟。然而,当我们定义完一个结构体后想传递参数进去时,会抛异常,或者是传入了结构体,但是返回值却不是我们想要的,经过调试跟踪后发现,那些值原创 2013-09-17 18:40:56 · 47464 阅读 · 18 评论 -
CL编译之无法解析的外部符号 __imp__CoUninitialize@0,该符号在函数
用CL编译时,提示需要加上ole32.lib进行编译。CMD中可以如此输入:cl CLIENT.cpp ole32.lib原创 2013-07-04 15:29:52 · 4168 阅读 · 1 评论 -
VS2010中使用CL快速 生成DLL的方法
方案一:1、命令行中输入cl example.cpp,生成example.obj和example.lib文件。有可能还会提示“没有入口点”的错误。这是因为我们的CPP中是要生成dll文件的,并没有main()这样的主函数作为入口点。如果是C文件,则输入cl /c example.cpp2、命令行中输入cl /def:example.def /dll:example.obj方案二:命令行中输...原创 2013-07-03 16:13:24 · 3388 阅读 · 2 评论 -
WIN7下VS2010中使用cl编译的步骤
使用cl编译的步骤:一:方案一1、必须先设置cl.exe所在的路径为环境变量。其路径一般为VS或VS的安装路径的bin文件夹下,如D:\ProgramFiles\Microsoft Visual Studio 10.0\VC\bin2、打开cmd后先运行vcvars32.bat或者vsvars32.bat设置环境变量,该bat文件运行后,仅对当前的cmd命令窗口有效,每次启动都需要运行一次。...原创 2013-07-03 16:11:39 · 3073 阅读 · 0 评论 -
Win7下VS2010编译的程序在XP报错:找不到msvcp100d.dll或者msvcp100.dll
一、关于DLL的说明报错为msvcp100d.dll,说明是在DEBUG下编译的程序,d表示DEBUG。报错为msvcp100.dll,说明是在RELEASE下编程的程序。二、解决方案:(一)方案一:(参照http://blog.csdn.net/fengkuangfj/article/details/9094177)1、在targetver.h中添加代码,参照原创 2013-07-03 09:30:30 · 3109 阅读 · 0 评论 -
关于链接过程中出现的“找到一个或多个多重定义的符号”和“无法解析的外部符号”错误的探究
不妨先看一个例子://A.h#pragma once#include "B.h"class A{public: A(void); ~A(void);}; //B.h#pragma onceint a; class B{public: B(void);转载 2013-07-16 08:29:04 · 1789 阅读 · 0 评论 -
C++ const
概念 const就是为了直接表达“不变化的值”这一概念。也就是说该值只可读,不可直接写。 由于不可以修改,所以const常量在修改的时候必须初始化 const int a; //error extern const int ext_a; 作用 可以定义const常量,具有不可变性 const int a转载 2013-07-12 07:58:08 · 1000 阅读 · 0 评论 -
双指针技巧汇总(转)
我认为双指针技巧还可以分为两类,一类是「快慢指针」,另一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。一、快慢指针的常见算法快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前,慢指针 slow 在后,巧妙解决一些链表中的问题。1、判定链表中是否含有环这应该属于链表最基本...转载 2019-06-26 14:01:48 · 1286 阅读 · 1 评论