chensen 2009-08-05
当VC等调用C#写的COM时,用regasm /tlb生成TLB文件,也可用tlbexp.exe,在VC等中加载TLB文件,当用C#调用VC等写的COM时,用tlbimp.exe,你可以写一个程序调试一下
下面介绍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++动态链接库了