调用dll时c#中的访问冲突错误
在Vb6代码中,如下所示:调用dll时c#中的访问冲突错误,c#,visual-studio-2013,vb6,dllimport,C#,Visual Studio 2013,Vb6,Dllimport,在Vb6代码中,如下所示: Public Declare Sub PLCReadWord Lib "COM3964R.dll" Alias "plc_fetchword" _ (com As Long, _ Db As Long, _ Dw As Long, _ data As Long, _
Public Declare Sub PLCReadWord Lib "COM3964R.dll" Alias "plc_fetchword" _
(com As Long, _
Db As Long, _
Dw As Long, _
data As Long, _
RisOper As Long)
在C#侧转换为:
[DllImport("..\\..\\dll\\Com3964r.dll", EntryPoint = "plc_fetchword")]
public static extern void PLCReadWord(
int com,
int Db,
int Dw,
int data,
int RisOper);
使用Visual Studio 2013-Framework 3.5-x86模式编译。我的系统有64位CPU和64位Windows 10
运行程序系统时,在以下代码处给出一个错误。我认为myDummyData
和mydummerror
(两种类型都是Int32
)无法写入:
ClassPLC.PLCReadWord(Convert.ToInt32(txtCommPort.Text),
Convert.ToInt32(txtDbRead.Text),
Convert.ToInt32(txtDwRead.Text),
myDummyData, myDummyError);
VB6默认通过传递参数
ByRef
。对应于C#中的ref
。将导入函数的C#声明中的所有参数更改为ref
您收到的错误是什么?当您运行程序时,您是否确定相对于您的应用程序正在运行的位置,dll位于上两个目录中,然后位于一个dll目录中?是否有任何原因使您无法随应用程序分发Com3964r.dll,然后从DllImport中删除..\..\\dll\\n?调用PLCReadWord函数时,错误为“访问冲突错误未处理”。在目录路径表示法中没有问题。PLCOpenPort和PLC ClosePort运行正常。这些只是dll的发送值,不等待任何返回值。但是PLCReadWord无法写入myDummyData和myDummyError。