使用数值计算库Zero - VC6调用失败、cfree调用成功
Zero是一个功能丰富的C++数值计算库,具有复数、向量、矩阵等类,具备求根,拟合,插值,积分,随机数,统计,全局和局部的约束以及无约束优化,常微分方程求解等多项功能。
先下载一份Zero;看一下,有dll,手册,还有libZero.dll.a文件;有gcc的库文件,没有VC++的库文件(lib);
先用VC6调用一下;
先下载一个由DLL生成lib文件的工具,生成lib文件看一下;
生成一个lib文件;
生成一个单文档工程;项目做如下设置;先拷贝lib文件到项目;
Zero.dll拷贝到exe目录;项目要包含zero提供的头文件,下载来就有;
OnDraw函数代码如下;
void CTestzeroView::OnDraw(CDC* pDC)
{CTestzeroDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;Complex a1,a2,a3;a1.setReal(10.0);a1.setImag(5.0); //虚数,imaginary numbera2.setReal(6.0);a2.setImag(2.0);a3 = a1-a2;str1.Format("a3 is: %f + %f", a3.getReal(), a3.getImag());pDC->TextOut(50,50,str1);
}
然后构建;总是出这个错误;
error LNK2001: unresolved external symbol "public: virtual __thiscall Complex::~Complex(void)" (??1Complex@@UAE@XZ)
可能是没有找到lib文件;
使用代码导入lib文件;
#pragma comment(lib, "Zero.lib")
还是一样报LNK2001错误;
代码中应该找到了lib文件;因为如果随意改个不存在的lib文件名字,如: #pragma comment(lib, "Zerodddd.lib")
则提示: LINK : fatal error LNK1104: cannot open file "Zerodddd.lib"
那么到此有可能是,用工具生成的lib文件有问题;zero本身不提供lib文件;
如果采用动态调用dll方式,则比较麻烦;动态装入DLL,获取函数地址,然后调用的方式;因为zero的dll提供的是类;
下面用CFree看一下;主文件代码如下;要把它的头文件包含进来;
#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "zero.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);HINSTANCE hInst;
TCHAR szClassName[] = TEXT("zeroDemo");Complex a1,a2,a3;int WINAPI
WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_TESTZERO2);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("zero示例"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,400,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam;
}LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{PAINTSTRUCT ps;HDC hdc;RECT rt; char szBuffer[100]; switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_zero: hdc=GetDC(hwnd);a1.setReal(10.0);a1.setImag(5.0); //虚数,imaginary numbera2.setReal(6.0);a2.setImag(2.0);a3 = a1-a2;//wsprintf(szBuffer, "%d",a1.getReal());sprintf(szBuffer,"a1: %lf + %lf",a1.getReal(),a1.getImag());TextOut(hdc,10,10,szBuffer,lstrlen(szBuffer));sprintf(szBuffer,"a2: %lf + %lf",a2.getReal(),a2.getImag());TextOut(hdc,10,40,szBuffer,lstrlen(szBuffer));sprintf(szBuffer,"a3=a1-a2: %lf + %lf",a3.getReal(),a3.getImag());TextOut(hdc,10,70,szBuffer,lstrlen(szBuffer));break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("zeroDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("zeroDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam); }break;case WM_CREATE:break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rt); EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0;
}
如果做如下的设置;libZero.dll.a拷贝到exe目录,拷贝到CFree的库文件目录;dll拷贝到exe目录;
则一直提示连接错误;
正在连接...
[Error] C:\PROGRA~2\C-FREE~1\mingw\bin\ld.exe: cannot find -llibZero.dll.a
配置为如下,则构建成功;
然后运行程序,结果如下;
代码只是简单的调用一下它的复数类;定义2个复数并赋值实部和虚部;再计算复数相减的结果;它的复数类是可用的;
其他更多功能自己探索;
wsprintf不支持格式化浮点类型,改用sprintf,sprintf需要包含#include <stdio.h>;
#include "resource.h"
#include <windows.h>/
//
// Menu
//IDC_TESTZERO2 MENU
BEGINPOPUP "&File"BEGINMENUITEM "ZERO", IDM_zeroMENUITEM "E&xit", IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...", IDM_ABOUTEND
END
#define IDM_EXIT 10001
#define IDM_ABOUT 10002#define IDC_TESTZERO2 10101
#define IDD_ABOUTBOX 10102
#define IDM_zero 40001
使用数值计算库Zero - VC6调用失败、cfree调用成功相关推荐
- createfile调用失败_CreateFileMapping调用失败,GetLastError返回值为1006
今天在创建文件映射对象时出错,返回值为1008("文件所在的卷已被外部改变,因此打开的文件不再有效. "),代码如下: CFile file(_T("C:/test.da ...
- c调用python第三方库_用 Python ctypes 来调用 C/C++ 编写的第三方库
看到一篇简洁的文章--如何用Python ctypes调用C++(ctypes调用C没这么多麻烦事),不敢独享... 如果需要用 Python 调用 C/C++ 编写的第三方库(这些第三方库很可能就是 ...
- ARM开发板上iconv_open(utf-8, gb2312) 调用失败的解决方法(转)
ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法 应用程序代码如下: static int code_convert ...
- python科学计算库-数值计算库与科学计算库
BLAS 接口 BLAS , LAPACK , ATLAS 这些数值计算库的名字很类似,他们之间有什么关系呢?BLAS是一组线性代数运算接口,目前是事实上的标准,很多数值计算/科学计算都实现了这套接口 ...
- C 语言fseek, ftell调用失败(fseek返回非零值,ftell返回-1)
C 语言fseek. ftell调用失败(fseek返回非零值,ftell返回-1) 太长不看版 fseek调用失败,返回非零值,是因为传入的参数超过了文件尾,或者文件大于2G,需要使用fseek的6 ...
- pythonidle安装第三方库_在Python IDLE 下调用anaconda中的库教程
在Python IDLE 下调用anaconda中的库教程 大家都知道,Anaconda是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.下载了anaco ...
- VS2019 MFC DLL共享动态链接库(MFC 常规库)封装例程非模态调用 MFC 常规库[二]
[ 前言] 网上用很多关于MFC 共享DLL的简介,此处不在叙述.实际应用中发现"共享MFC DLL的规则DLL"是在编写基于MFC的DLL程序时,编译后该DLL ...
- LoadLibrary 调用失败错误码记录
在某些服务器上,LoadLibrary 函数会出现调用失败的情况,以下是我的一些出错经验,希望能给其他人提供一些思路: 1.错误码 126 (找不到指定的模块): 1.确保该动态库存在,杀毒软件有时会 ...
- 部分电脑安装wps后,导致pptcom调用失败的解决方法
最近发现公司的win7电脑上安装了wps导致pptcom调用失败,自家的软件控制不了ppt,去查pptcom注册表,发现wps把所有com接口ID都指向了自己的com组件的类型库(wps2013改变了 ...
最新文章
- java 任意多个整数相加_一个整数分为若干个连续整数之和(使用java实现)
- JConsole监控远程Tomcat服务器
- 程序员面试题精选100题(40)-扑克牌的顺子[算法]
- 《神武4》手游玩家高峰论坛落幕 玩家集思广益 游戏氛围有望调整
- 引导修复 不是活动的_河南省视频数据修复中心
- reset java_Java PushbackReader reset()用法及代码示例
- 经典面试题(15):以下代码将输出的结果是什么?
- Linux使用rostopic echo将rosbag文件转换成csv或txt文件以及sh脚本批量化操作
- python自动化框架(unnitest+selenium+htmlreport)
- POJ 2886 能被3除尽的数之和
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression Regularization
- 深度 | 从各种注意力机制窥探深度学习在NLP中的神威
- 机器学习: 最大似然估计 (MLE) 最大后验概率(MAP)
- 手动发布web项目到tomcat服务器上
- 微信小程序开发的基本流程__BaiMoci
- sublime php code sniffer,Sublime插件CodeSniffer配置
- 基于FPGA的数字信号处理3.7开平方运算分析
- 网络爬虫-学习记录(三)使用Selenium并对去哪儿网站进行爬取
- [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
- 计算机cmd测试命令,[cmd测试网速]cmd指令测试网速技巧
热门文章
- mysql audit log.so_Percona Audit Log Plugin(mysql 审计)
- jinfo 的相关使用 || 两个经典的参数: -Xms -Xmx
- openFeign 服务接口的调用02—— openFeign 的使用步骤
- 第2周项目1c++语言中函数参数传递的三种方式
- Power of Two
- laplacian算子的运用
- img文件解包工具_使用tar归档命令,就不怕文件多!
- android 增删改查 源码_学生信息增删改查小程序案例(springboot服务端)
- 本地项目关联到远程git仓库
- explian执行计划