Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参考C++;我的项目中的Dll_C# - Fatal编程技术网

C# 参考C++;我的项目中的Dll

C# 参考C++;我的项目中的Dll,c#,C#,我必须引用一个不是我在C#项目中创建的dll。当我尝试添加引用时,我得到一个错误,即无法添加dell。我尝试使用TlbImp.exe,如下所示: TlbImp.exe 'C:\\Desktop\PCMiler\pcmsrv64.dll' 我得到的错误是dll不是有效的类型库 然后我试着 [DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll")] 但它不起作用。 我还尝试: regsvr32 'C:\\Desktop\PCMiler\

我必须引用一个不是我在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,但找不到入口点。
我做错了什么?

您使用

[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll")]
是正确的,但正如错误消息所述,您需要指定一个入口点。 这意味着如果你想调用的C++函数名为“代码> DOFooE())/Cuth.>你需要使用函数作为入口点:
[DllImport("C:\\VSProjects\\PCMilerConnect\\pcmsrv64.dll", EntryPoint="DoFoo")]
一个切入点是。 另见

编辑:如果这对您有效,请尝试:

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

如果您在C++语言中定义了一个名为“代码>跳闸<代码> >的结构,它类似C++侧代码>跳闸< /代码> .< 编辑2: 您说您没有访问签名的权限,因此我相信您传递的不是

Trip
,而是
int
。试试这个:

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

TblImp和regsvr32是用于COM DLL的,而这不是。阅读并解释你的DllImport是如何工作的。对于初学者来说,你真的应该使用相对路径。@Lio你能展示一下你正在应用
DllImport
的函数声明吗?请发布代码,不要截图!此外,您还没有发布尝试使用
DllImport
时收到的错误消息。还有,为什么在声明中写了两次
int
?我没有访问方法签名的权限。只是我发的文件你确定吗?这个问题似乎表明您所指的错误消息是OP使用regsvr32时发出的,而不是使用DllImport时发出的。当我使用DllImport时,我不需要使用
EntryPoint
@Default,谢谢你清除了这个问题,是的,关于入口点的错误消息似乎只在使用
regsvr32
时出现,但OP没有说明他遇到了什么错误(“我尝试了,但没有成功”)在尝试DllImport时,我想可能也是这样。谢谢。我正在尝试使用“PCMSLookup()”@Lio好的,你能告诉我函数的定义(例如返回类型、参数)吗?这样我就可以试着为你设置一个有效的解决方案了