Dll导入的函数不在C#上运行,但在vb6上运行

Dll导入的函数不在C#上运行,但在vb6上运行,c#,.net,dll,vb6,dllimport,C#,.net,Dll,Vb6,Dllimport,我正在使用一个旧的dll文件函数,该函数目前在vb6中正常工作,声明如下: Public Declare Function DecOutb Lib "DecLib.dll" Alias "_outportb@8" _ (ByVal PortAddress As Long, ByVal state As Byte) As Long Public Declare Function DecOutLong Lib "DecLib.dll" Alias "_outport@8" _ (ByVal Por

我正在使用一个旧的dll文件函数,该函数目前在vb6中正常工作,声明如下:

Public Declare Function DecOutb Lib "DecLib.dll" Alias "_outportb@8" _
(ByVal PortAddress As Long, ByVal state As Byte) As Long

Public Declare Function DecOutLong Lib "DecLib.dll" Alias "_outport@8" _
(ByVal PortAddress As Long, ByVal state As Long) As Long
[DllImport("DecLib.dll", EntryPoint = "_outport@8", CallingConvention = CallingConvention.StdCall)]
public static extern int DecOutLong(int PortAddress, int State);
该函数的实现如下所示:

k = DecOutLong(ad_addr, Data)
当它成功时,它返回k=1,并且是

但是,当我把它放在.net C#上时,即使没有收到任何警告或错误,但函数不起作用,返回k=0。我的声明是这样的:

Public Declare Function DecOutb Lib "DecLib.dll" Alias "_outportb@8" _
(ByVal PortAddress As Long, ByVal state As Byte) As Long

Public Declare Function DecOutLong Lib "DecLib.dll" Alias "_outport@8" _
(ByVal PortAddress As Long, ByVal state As Long) As Long
[DllImport("DecLib.dll", EntryPoint = "_outport@8", CallingConvention = CallingConvention.StdCall)]
public static extern int DecOutLong(int PortAddress, int State);
具体实施如下:

k = DecOutLong(ad_addr, DATA);

修正后,我按照tcarvin的建议将其设置为编译为x86而不是“任何PC”。我怀疑在这种情况下还有更多需要澄清的地方,但至少它是有效的。

在VB6中,返回类型是long,参数是long或byteSorry,请忽略第一个VB6声明,第二个是示例,尽管没有一个可以这样做。与VB6等效,字节应为
Byte
。您的C#与VBIt的stdcall匹配。你为什么会认为是cdecl。猜测毫无意义。平沃克没什么问题。这是正确的。无论问题是什么,都无法根据此处的信息确定。