当VC等调用C#写的COM时,用regasm /tlb生成TLB文件,也可用tlbexp.exe,在VC等中加载TLB文件,当用C#调用VC等写的COM时,用tlbimp.exe,你可以写一个程序调试一下
成都创新互联专业为企业提供靖西网站建设、靖西做网站、靖西网站设计、靖西网站制作等企业网站建设、网页设计与制作、靖西企业网站模板建站服务,10余年靖西做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
下面介绍C#调用C++动态链接库方法。
添加System.Runtime.InteropServices命名空间
如是COM就直接用静态函数调用:
- public static int GetNum(
- int lFileSeqNo,
- string sExtType,
- string sExtNumber,
- string sFormID,
- string sOperationDate,
- string sSystemRegistDate,
- out int lCount,
- out int lErrorType,
- out int lErrorCode)
- {
- int iRet;
- WOBCom.ObjClass obj = new WOBCom.ObjClass();
- iRet = obj.GetNum(
- lFileSeqNo,
- sExtType,
- sExtNumber,
- sFormID,
- sOperationDate,
- sSystemRegistDate,
- out lCount,
- out lErrorType,
- out lErrorCode);
- return iRet;
- }
如不使COM是普通的DLL
不能直接用
只能在C++中加一个对外的接口:
- extern "C" __declspec(dllexport) WOExtConRegObj* OutGetObjConstructor();
- extern "C" __declspec(dllexport) void OutGetObjDestructor(WOExtConRegObj* outGetObj);
- extern "C" __declspec(dllexport) long SelectDummyRecord(long *lErrorType,
- long *lErrorCode,
- WOExtConRegObj* outGetObj);
- //
- extern "C" __declspec(dllexport) WOExtConRegObj* OutGetObjConstructor()
- {
- WOExtConRegObj* outGetObj = new WOExtConRegObj();
- return outGetObj;
- }
- extern "C" __declspec(dllexport) void OutGetObjDestructor(WOExtConRegObj* outGetObj)
- {
- delete outGetObj;
- }
- extern "C" __declspec(dllexport) long SelectDummyRecord(long *lErrorType,
- long *lErrorCode,
- WOExtConRegObj* outGetObj)
- {
- return outGetObj->SelectDummyRecord(lErrorType,
- lErrorCode);
- }
就可直接用C#调用C++动态链接库了
- [DllImport("XXX.dll", EntryPoint="SelectDummyRecord", ExactSpelling=false, CallingConvention=CallingConvention.Cdecl)]
- private static extern int SelectDummyRecord(out int lErrorType,out int lErrorCode,int outGetObj);
- /// < summary>
- /// < /summary>
- /// < remarks>
- /// < /remarks>
- /// < param name="lErrorType">< /param>
- /// < param name="lErrorCode">< /param>
- /// < returns>< /returns>
- public int SelectDummyRecord(out int lErrorType,out int lErrorCode)
- {
- int intRtn;
- intRtn = SelectDummyRecord(
- out lErrorType,
- out lErrorCode,
- m_OutGetObj);
- return intRtn;
- }
这样就解决了C#调用C++写的动态链接库的问题。
【编辑推荐】
本文标题:C#调用C++动态链接库方法介绍
文章转载:http://www.shufengxianlan.com/qtweb/news24/171324.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联