利用C语言编译器生成dll供其他软件调用
By
admin
at 2017-12-10 • 0人收藏 • 1563人看过
示例:有一个东西需要由输入的数值来计算出相应的位移变化量, 思路是:生成两个函数调用,一个init初始化参数,一个calc计算输出.
//生成DLL code = /** #include <stdio.h> #include <math.h> //默认值 double dataR = 0.0; double dataX1 = 0.0; double dataX2 = 0.0; double dataY = 0.0; __declspec(dllexport) void uVwInit( double dR,double dx1,double dx2,double dy ) { dataR = dR; dataX1 = dx1; dataX2 = dx2; dataY = dy; } __declspec(dllexport) void uVwCalc( double angle,double* dx1,double* dx2,double* dy ) { *dx1 = dataR * cos(( angle + dataX1 ) * 3.1415926 / 180 ) - dataR * cos( dataX1 * 3.1415926 / 180 ); *dx2 = dataR * cos(( angle + dataX2 ) * 3.1415926 / 180 ) - dataR * cos( dataX2 * 3.1415926 / 180 ); *dy = dataR * sin(( angle + dataY ) * 3.1415926 / 180 ) - dataR * sin( dataY * 3.1415926 / 180 ); } **/ import tcc; vm = tcc( );//创建编译器 vm.addLib( "user32", "kernel32", "gdi32" ) vm.output( "/uVwCalc.dll", code ) //编译C源码,生成DLL vm.close(); //收工 import console; console.open() //加载生成的DLL var dll = raw.loadDll( "/uVwCalc.dll",,"cdecl"); //导入API,记住第二个参数需要指定cdecl调用约定(也就是C语言调用约定) uVwInit = dll.api( "uVwInit","void(double dataR,double dataX1,double dataX2,double dataY)" ); uVwCalc = dll.api( "uVwCalc","void(double angle,double& dx1,double& dx2,double& dy)" ); uVwInit(53.74,45,315,225);//调用初始化 var stx1,stx2,sty ; var s1,s2,s3 = uVwCalc(1,0,0,0); console.log( s1,s2,s3 ); var s1,s2,s3 = uVwCalc(2,0,0,0); console.log( s1,s2,s3 ); console.pause();
生成了dll之后如果要给labview调用,最好是写一个h头文件.格式如下:
/* --------------------------------------------------------------- 文件名称:uVwCalc.h --------------------------------------------------------------- */ #ifdef UVWCALC_EXPORTS #define UVWCALC_API __declspec(dllexport) #else #define UVWCALC_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif /***************************************************** *函数名称:uVwInit *输 入:dR 通过连接在个周四的交叉滚柱轴承中心的假设圆半径(mm) dx1 连接在X1轴上的交叉滚柱轴承中心的角度位置(mm) dx2 连接在X2轴上的交叉滚柱轴承中心的角度位置(mm) dy 连接在Y轴上的交叉滚柱轴承中心的角度位置(mm) *输 出:空 *功 能:初始化UVW位置参数 *示 例:初始化为120平台参数 void uVwInit( 53.74 , 45 , 315 , 225 ); ******************************************************/ UVWCALC_API extern void uVwInit (double dR,double dx1,double dx2,double dy); /***************************************************** *函数名称:uVwCalc *输 入:angle 移动角度 *输 出:dx1 X1轴的相对进给量(mm) dx2 X2轴的相对进给量(mm) dy Y轴的相对进给量(mm) *功 能:计算UVW平台各轴进给量 *示 例:移动3.2度 double* dx1; double* dx2; double* dy; void uVwCalc(3.2,dx1,dx2,dy); ******************************************************/ UVWCALC_API extern void uVwCalc( double angle,double* dx1,double* dx2,double* dy ); #ifdef __cplusplus } #endif
1 个回复 | 最后更新于 2017-12-30
admin
2017-12-30
#1
登录后方可回帖