在我的项目中引用C ++ Dll

时间:2017-06-16 11:20:06

标签: c#

我必须在C#项目中引用一个不是我创建的dll。当我尝试添加引用时,我收到了无法添加dell的错误。我尝试使用TlbImp.exe,如:

TlbImp.exe 'C:\\Desktop\PCMiler\pcmsrv64.dll'

我收到的错误是dll不是有效的类型库。

然后我试了

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll")]

但它没有用。 我也尝试过:

regsvr32 'C:\\Desktop\PCMiler\pcmsrv64.dll'

我得到了dll加载但未找到入口点的错误。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

您使用

尝试的方式
[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll")]

是正确的,但正如错误消息所述,您需要指定入口点。 这意味着如果您要调用的C ++函数名为DoFoo(),则需要使用函数作为入口点导入Dll:

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="DoFoo")]

入口点是function name or ordinal。 另请参阅DllImport attribute documentation

编辑:试试这是否适合你:

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="PCMSLookup")]
public static extern int PCMSLookup(Trip tripId, string placeName, int easyMatch);

前提是您还在C#中定义了一个名为Trip的结构,类似于C ++端Trip

编辑2: 你说你无权访问签名,所以我相信你可能会传递Trip而不是传递int。试试这个:

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="PCMSLookup")]
public static extern int PCMSLookup(int tripId, string placeName, int easyMatch);