Adams2013编译C语言用户子程序生成dll超详细教程讲解

合集下载

C语言编译成dll

C语言编译成dll

C语⾔编译成dll
⾸先c语⾔在开始要加上
#ifdef __cplusplus
extern "C" {
#endif
…被导出的⽅法名称
#ifdef __cplusplus
}
#endif
不然系统会将起当做c++,转成的dll中的⽅法名称会被转义。

在实现的⽅法名称前⾯加上__declspec(dllexport)
1. Gcc:gcc –shared -o xxxx.dll xxxx.c 可以直接将.c⽂件转成dll⽂件。

在实际引⽤中,我是将所有的#include都是放在.c⽂件中的,上述的注意代码也是放在.c中的,他的头⽂件是直接抛弃掉了。

2. Vc创建⼀个c++的项⽬,⽂件-新建-新建项⽬-其他语⾔-Visual C++ - Win32 控制台应⽤程序;勾选DLL和导出符号,.c需要修改
成.cpp,右键-属性-预编译头-不使⽤预编译头,右击项⽬“重新⽣成”。

1实地使⽤过确认可以使⽤,2未尝试过但是在使⽤c++转出dll是没有问题的
在导出过程中我们可以使⽤vs⾃带⼀个⼯具来查询⽣成的dll中有那些⽅法,例如:
Vs安装路径下:C:\vs 2012\VC\bin\dumpbin.exe,可能会报⼀个缺少“mspdb110.dll”⽂件的错误,直接将安装路径下:C:\vs
2012\Common7\IDE下⾯的该⽂件复制粘贴到C:\vs 2012\VC\bin\下⾯。

⽤法是,先cd到dumpbin的路径下,dumpbin –exports xxxx.dll。

c语言如何生成DLL文件

c语言如何生成DLL文件

DLLIMPORT void HelloWorld (void);
#endif /* _DLL_H_ */
C 文件 dllmain.c #include t;
DLLIMPORT void HelloWorld () {
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION); }
/*过程要带入的参数*/
LibHandle = LoadLibrary(dllbuf); /*载入 dll*/
FUNCADD = (MYFUNC)GetProcAddress(
LibHandle, sysbuf); /*获取函数 sysbuf 的地址*/
(FUNCADD) (NULL,downfile,savefile,0,NULL);
if (hDLL == NULL) hDLL=LoadLibrary("hello.dll"); //加载 DLL
hello = (func)GetProcAddress(hDLL,"HelloWorld"); //获取函数指针 hello(); FreeLibrary(hDLL); //释放 DLL return 0; }
开发环境是 DEV C++,采用 C 语言编写 创建一个 DLL 项目,项目名称 hello,DLL 编写采用的是 DEV C++中的示例代码
头文件 dll.h #ifndef _DLL_H_ #define _DLL_H_
#if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */

应用c语言编写ADAMS用户自定义函数的研究

应用c语言编写ADAMS用户自定义函数的研究

, 引言
((6HFP=H8M )K>=P8M (>=CKI8I FL *9MB=>8M=C +KIH9P) ()(*+ 是由美国 *)4 公司研制的集建模,求解,可视化技术于一体的 虚拟样机软件,是世界上应用最广泛的、最具权威性的机械系 统动力学仿真分析软件 - 目前已经被广泛应用到航空航天、兵 器、 汽车制造等各个行业。 作为一种优秀的虚拟样机软件, ()(*+ 具有很强的二次开 发功能,包括 ()(*+ Y V89Z 界面的用户化设计,利用语言实现 自动建模和仿真功能,通过编制用户自定义函数或子程序 (@I9G % ]G8HH9> +6^GF6H8>9) 满足用户的某些特定需求, 甚至可以 拓展 ()(*+ 的功能,为用户开发出具有特定功能的仿真分析 软件。 V8IH6=C ’ W W 是当今最流行的面向对象的程序设计语言, 可视化与面向对象设计是当今最流行的编程技术,而 ()(*+ 提供的子程序模板文件是以 _‘aRa(: 语言编写的, 文献 b , , "c 使用 _‘aRa(: 语言编写用户自定义函数。广大用户一直在积 极探索如何应用 ’ 语言编制用户自定义函数或子程序,这一问 题已经成为应用 ()(*+ 进行二次开发的焦点 b . c 。 这里主要介
! 来稿日期: "##$ % #$ % "&
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-
绍如何在 ()(*+ Y V89Z 中调用由 ’ 语言编制的用户自定义函 数, 为 ()(*+ 二次开发提供参考。
" 用户自定义函数

DLL文件的生成和引用方法

DLL文件的生成和引用方法

一、动态链接库什么是动态链接库?DLL三个字母对于你来说一定很熟悉吧,它是Dynamic Link Library 的缩写形式,动态链接库(DLL) 是作为共享函数库的可执行文件。

动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。

函数的可执行代码位于一个DLL 中,该DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。

DLL 还有助于共享数据和资源。

多个应用程序可同时访问内存中单个DLL 副本的内容。

和大多数程序员一样,你一定很使用过DLL吧。

也曾感受到它的带给你程序设计和编码上的好错吧今天我想和大家探讨一个主题:如何在C#创建和调用DLL(动态链接库), 其实在很大意义上而讲,DLL让我更灵活的组织编写我们的应用程序,作为软件设计者,可一个根据它来达到很高的代码重用效果。

下面我来介绍一下在C#中如何创建和调用DLL。

二、准备工作我们需要对我们接下来要做的事情做个简单的介绍,在本文我们将利用C#语言创建一个名为MyDLL.DLL的动态链接库,在这个动态链接库文件中我们将提供两个功能一个是对两个参数交换他们的值,另一个功能是求两个参数的最大公约数。

然后创建一个应用程序使用这个DLL。

运行并输出结果。

1、MySwap.csnamespace MyMethods{public class SwapClass{public static bool Swap(ref long i,ref long j){i = i+j;j = i-j;i = i-j;return true;}}}2、MyMaxCD.csnamespace MyMethods{public class MaxCDClass{public static long MaxCD(long i, long j){long a,b,temp;if(i>j){a = i;b = j;}else{b = i;a = j;}temp = a % b;while(temp!=0){a = b;b = temp;temp = a % b;}return b;}}}需要注意的是:我们在制作这两个文件的时候可以用Visual 或者其他的文本编辑器,就算是记事本也可以。

反编译C#的dll文件并修改,再重新生成dll

反编译C#的dll文件并修改,再重新生成dll

反编译C#的dll⽂件并修改,再重新⽣成dll
1、把dll⽂件导⼊到ildasm⼯具中,ildasm是由微软提供的.net程序反编译⼯具,位于“C:\Program Files (x86)\Microsoft
SDKs\Windows\v7.0A\Bin”
2、在ildasm中File->dump,把dll⽂件转储为*.il⽂件存到某个指定⽂件夹⾥,得到*.il和*.res两个⽂件,有时也会有*.resource⽂件
3、⽤记事本打开得到的*.il⽂件,找到对应的⽅法,进⾏修改(如果修改的代码太多,那则需要先学习⼀下“C#反编译之IL语法”),具体情况具体分析,修改之后保存。

4、打开DOS命令,进⼊到 c:\Windows\\Framework\v2.0.50727> ⽂件夹,然后输⼊命令:ilasm /dll/resource=a.res a.il(注意a.res和a.il两⽂件夹位置不可变),回车,就在对应⽬录下⽣成新的dll⽂件,如果不放⼼,可以⽤Refletor反编译⼯具重新反编译新的dll⽂件,检查代码。

dll文件生成方法

dll文件生成方法

dll文件生成方法
DLL(动态链接库)文件的生成可以通过多种方式,其中一种简单的方法是通过 Microsoft Visual Studio 这样的集成开发环境(IDE)进行。

下面是详细的步骤:
1. 创建环境:首先,确保你已经安装了 Microsoft Visual Studio。

其他版本的 Visual Studio(如 Visual Studio 2022)也可以,但步骤大致相同。

2. 创建 DLL 项目:
打开 Visual Studio。

选择“新建项目”。

在项目模板中选择“DLL”。

输入 DLL 的名称,然后点击“确定”。

3. 编写 DLL 代码:在创建的项目中,你可以开始编写 DLL 的代码。

一个简单的 DLL 可能包含一个导出函数。

4. 编译 DLL:
在 Visual Studio 中,点击“生成”菜单,然后选择“生成解决方案”或直接按 F7 键。

5. 检查生成的 DLL:编译成功后,可以在项目文件夹的“Debug”或“Release”子文件夹下找到生成的 DLL 文件。

6. 测试 DLL:为了测试 DLL 是否正常工作,你可以创建一个新的Windows 应用程序项目,并在其中调用你的 DLL。

7. 分发 DLL:如果你想将 DLL 分发给其他人,只需将 DLL 文件和任何依赖项一起打包即可。

请注意,这只是生成 DLL 的其中一种方法。

还有其他工具和平台(如 Linux)可以使用,具体取决于你的需求和环境。

adams_solver(ADAMS求解器培训资料)

adams_solver(ADAMS求解器培训资料)

ADAMS/Solver中的四种文件类型ADAMS/Solver与ADAMS/View间的关系.bin/.cmd/.adm三种文件的异同点ADAMS/Solver 中的dataset file (.adm)练习: 读取.adm文件模型文件:shell_contact /shell contactGearGenerator2003_demo_shell.admmo shell.admADAMS/Solver command file练习: 读懂.acf文件模型文件:shell_contact /shell contact GearGenerator2003_de mo_shell.acfmo shell.acfSimulating a model in ADAMS/Solveradams05r2 ru‐sbelt_2d_pt_circle_hht.acf exhht acf练习: 读懂.acf文件运行模型模型文件:shell_contact /shell contactGearGenerator2003_demo_shell.acfmo shell.acf练习:批处理运行set MDI_ADAMS_CPU_COLUMN="Y"call adams05r2 ru‐s belt_2d_pt_circle_hht.acf excall adams05r2 ru‐s belt_2d_pt_circle_si2.acf exbelt2d pt circle si2acf模型文件:HHT / run_models.bat模型文件run models batADAMS/Solver Subroutines用户子程序流程总结P1. 编写程序代码user.c;P2. 在VC中编译user.c,生成user.obj;P3. 使用adams命令行,由user.obj生成user.dll;d命令行由bj dllP4. 将user.dll加入到adams库中;P5. 在Function Builder中即可使用自定义的函数。

C语言编写adams用户自定义函数导入到adams中function builder

C语言编写adams用户自定义函数导入到adams中function builder

应用C语言编写adams用户自定义函数导入到adams中function builder 的整个过程1,当前使用软件adams2005,visual c++ v6,Compaq visual fortran6 (这里最好不要用intel visual fortran .当所用的adams为07版本时可以用intel visual fortran.其时需要fortran的目的是获得其中的*.dll文件所需的dll文件都放在附件里.)2,编写源程序,修改ADAMS安装目录下…/aview/user subs中vc_init_usr.c模板文件中的C 源代码或直接编写能够实现特定功能的C程序(注意严格按照模板格式编写)。

下面这个例子是我从网上找到的关于如何利用C程序产生正态分布的特殊随机数。

假设源程序保存为myvcfun.c#include"mdi_c.h"#include"math.h"#define M 8388608#define T 2045double MYRAND( double l ){double x,r,k,y,x1,x0;int j,i;x0=1;x1=1;for(j=0;j<l;j++){k=0;for( i=0;i<12;i++){x=fmod(T*x0,M);r=x/M;x0=x;k=r+k;}y=fmod(T*x1,M);x1=y;x0=x1;}return(k-6);}void vc_initialize_user(){vc_function_add("MYRAND", (FUNCTION)MYRAND, fn_R_R,1,0);}注意必须保存为 c 文件,将这个C文件与…/aview/usersubs中的mdi_c.h 的头文件放在一起用VC打开myvcfun.c点击compile进行编绎,在debug 文件夹中会产生myvcfun.obj文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.操作系统:Windows xp 32位
2.软件版本:Adams 2013 32位、Visual Studio 2010专业版32位
3.编译软件:Intel Visual Fortran 11.0
4.环境配置:
(1) 在操作系统环境变量Path中增加Adams启动文件mdi.bat的路径,如
D:\MSC.Software\Adams\2013\common\mdi.bat
(2) 把Fortran安装路径,如
D:\IVF2011\Intel\ComposerXE-2011\compiler\lib\ia32
(3) 把libifcoremd.lib、libifcoremd.lib、libmmd.lib、libifportmd.lib、libirc.lib、svml_dispmd.lib 这6个库文件复制到Adams安装路径下win32文件夹下
5.编写用户子程序
Adams安装程序D:\MSC.Software\Adams\2013\solver\c_usersubs文件夹下有C语言编写的常用的用户子程序,其中slv_c_utils.h文件是用户子程序的头文件。

编写用户子程序时,在这些程序的基础上进行更改会有事半功倍的效果。

本文以编写VForce用户子程序为例,对其编写、编译操作过程进行说明。

复制vfosub.c和slv_c_utils.h两个文件到个人工作文件夹Adams_Matlab,本文直接使用vfosub.c的原始代码,其代码为:
#include"slv_c_utils.h"
adams_c_Vfosub Vfosub;
/*
* Note:
* Use mixed case names for the Adams subroutine names when using the C
* style interface. For the default subroutine name capitalize the first
* letter and have the remaining letters lower case; Gfosub for example.
* Doing this insures that Adams Solver correctly distinguishes a C style
* subroutine from Fortran and calls with the appropriate interface.
*
*/
void Vfosub(const struct sAdamsVforce* vfo, double time, int dflag, int iflag, double* result)
{
/* Assign readable variable names to passed parameters */
double c=vfo->PAR[0];
int ipar[3]={(int)vfo->PAR[1], (int)vfo->PAR[2],(int)vfo->PAR[1]};
/* Local variables */
double vel[3];
int nstates;
int errflg;
/* call SYSARY for translation velocities TVEL */
c_sysary("TVEL", ipar, 3, vel, &nstates, &errflg);
c_errmes(errflg, "Error calling SYSARY for TVEL", vfo->ID, "STOP");
/* --- Evaluate VFORCE components ------------------------- */
result[0] = -c * vel[0];
result[2] = -c * vel[1];
result[2] = -c * vel[2];
}
注意:因为代码中引用了slv_c_utils.h,复制时必须同时复制slv_c_utils.h文件,否则编译时会报错。

6.编译操作
(1) 在开始菜单下,启动Visual Studio 2010命令提示工具。

(2) 把工作路径设置到用户子程序文件所在路径D:\Adams_Matlab,
输入指令cd D:\Adams_Matlab并按回车。

(3) 输入指令D:\MSC.Software\Adams\2013\common\mdi.bat并按回车,
(4) 系统进入Adams环境中
(5) 输入cr-u并按回车,
(6) 进入编译子程序,这时系统提示是否在调试状态下连接,直接输入回车。

(7) 输入C语言用户子程序的文件名vfosub.c并回车(注意:该文件必须是以.c为后缀名,不能以.cpp为后缀名,并且该文件必须在当前路径下存在)
(8) 系统提示输入下一个文件名称,这时直接点击回车;
(9) 然后输入生成的dll文件的名称,这个文件名可不与c文件同名,比如输入myvfosub.dll,
(10) 然后点击回车,系统进行编译。

编译完成后,如果系统提示编译成功,会在vfosu.c 所在的文件夹中生成编译成功的dll文件,至此完成用户子程序的编译。

(11)生成dll文件如下图所示:
第一行是源文件,第二行的第三个是生成的dll文件。

相关文档
最新文档