找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2228|回复: 1

[分享] VC调用C#动态库,建立ARX FOR VC工程

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-1 19:11:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  一、C#建立动态库,准备供VC调用的TLB接口文件
  1、新建工程,工程类型选择Class Library
  2、添加接口,在接口中添加方法
  3、添加类来继承接口,实现接口的方法
  4、给类和接口添加GUID,要添加using System.Runtime.InteropServices;
  生成TLB
  5、在assmebly.cs文件中添加
  [assembly: AssemblyDelaySign(false)]
  [assembly: AssemblyKeyFile("TestKeyPair.snk")]
  [assembly: AssemblyKeyName("")]
  注意这一句话要删除[assembly: ComVisible(false)]这句是系统自动生成的,它会影响TLH文件的生成,导致TLH中没有接口
  6、用VS2005的命令提示符生成snk文件sn -k TestKeyPair.snk
  7、用gacutil.exe –i命令把生成的DLL文件加到GAC中
  8、用regasm.exe yourdll.dll /tlb:com.youtlb.tlb命令生成TLB文件
  在C++中调用
  9、在需要调用的地方把生成的TLB文件导进来#import "com.youtlb.tlb" named_guids raw_interfaces_only
  10、用智能指针初始化实例,用智能指针调用接口中的方法
  yourNamespace::IYourInterfacePtr pCh;
  HRESULT hRes = pMeasureTable.CreateInstance(yourNamespace::CLSID_yourClass);
  if ( hRes == S_OK )
  {
   IYourInterfacePtr->yourMethod;
  }
  注意事项:
  a、用gacutil命令注册时有可能注册不上,这时候把GUID改一下,换一个新的就可以了。注册之后可以在VS2005的命令提示符中用oleview查看是否注册成功,注册了哪些函数
  b、每次编译了DLL之后就要重新注册,并生成新的TLB文件

  二、建立建立ARX FOR VC工程

  1、新建C++工程,选择MFC DLL类型
  2、在应用程序设置里面选择Regular DLL using shared MFC DLL (动态链接库使用共享MFC DLL)
  3、添加ARX和系统库
  在[Project]/[properties]/[configuration properties]/[linker]/[input]/[additional dependencies]下添加
  acad.lib AcCamera.lib acdb17.lib AcDblClkEditPE.lib acdbmgd.lib AcDbMPolygon17.lib
  acedapi.lib AcFdEval.lib AcFdUi.lib acge17.lib acgiapi.lib achapi17.lib acismobj17.lib
  AcSceneOE.lib AcTc.lib AcTcUi.lib acui17.lib adui17.lib aNav.lib aseapi17.lib asiapi17.lib
  axdb.lib oleaprot.lib rxapi.lib
  这里要注意,确定在[Tools]/[options]/[projects and solutions]/[vc++ directories]/[library files]下已经引用了ObjectArx的类库
  4、在头文件中声明要导出的函数,在函数前面加上__declspec(dllexport)表明你要导出这个函数供别的程序调用
  5、在CPP文件中实现要导出的函数
  三、ARX VC工程引入C#动态库
  1、把刚才生成的LIB文件拷贝到调用的工程里
  2、用#pragma comment(lib, "yourdll.lib")把类库载入
  3、用extern声明你要调用的函数,或者把DLL的头文件包含进来
  4、像用普通函数一样调用DLL中的函数
  5、把DLL文件和你的ARX放在一个文件夹中



VS2005 C++ 项目怎样添加“依赖附加项”、“库目录”和“包含目录”2010-06-08 20:581. 添加编译所需要(依赖)的 lib 文件

[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多 个 lib 以空格隔开。(等同于“#pragma comment(lib, "winsock.lib") ”语句)

2. 添加库(Libs)文件目录

方法 1:[解决方案资源管理器]“项目->属性->配置属性->连接器->常规->附加库目录”

方法 2:[菜单]“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“库文件”目录

3. 添加包含(include)文件目录

方法 1:[解决方案资源管理器]“项目->属性->配置属性->C/C++->常规->附加包含目录”

方法 2:[菜单]“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“包括文件”目录
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1632个

财富等级: 堆金积玉

发表于 2013-7-21 09:18:13 | 显示全部楼层
混合编程的应用,什么时候抽空也这么试试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-1 16:37 , Processed in 0.328567 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表