function GetVcell_Index(Devicechannum,IndexSs:Integer;var mV:widestring):Integer;stdcall;
传递参数:Devicechannum: 通道号 (只有一个通道,这里可以传1)
IndexSs:第几串
mV:(回传值)
返回参数:=0 表明不成功
=1 表明成功这是他的调用函数,那么我C#调用该如何调用,因为这个包含了2个返回值,就蒙了。。
C#大致应该如下吧?
[DllImport("UserDll.dll", CallingConvention = CallingConvention.StdCall)]
// public static extern int GetVcell_Index(string OrignStr, string Key, int NewStr);
以上仅供参考,能力有限,还请大虾帮忙!
传递参数:Devicechannum: 通道号 (只有一个通道,这里可以传1)
IndexSs:第几串
mV:(回传值)
返回参数:=0 表明不成功
=1 表明成功这是他的调用函数,那么我C#调用该如何调用,因为这个包含了2个返回值,就蒙了。。
C#大致应该如下吧?
[DllImport("UserDll.dll", CallingConvention = CallingConvention.StdCall)]
// public static extern int GetVcell_Index(string OrignStr, string Key, int NewStr);
以上仅供参考,能力有限,还请大虾帮忙!
试试
所以才有COM COM+ 到现在.NET可以试试楼上的
谢谢回答,ref属于返回的话应该就是那么定义,那么我该如何去读取返回值?在我的函数里面
比如:Val = GetVcell_Index(1,1,????);
无法加载 DLL“UserDll.dll”: 动态链接库(DLL)初始化例程失败。 (异常来自 HRESULT:0x8007045A)。
这个错误是来自于我程序本身,还是没有跟对方进行设备连接才会产生的。
int Val = 0;
Val = GetVcell_Index(1,1,ref mV);Val是返回值
UserDll.dll文件是否存在或路径是否正确!
Form1:xxxx.vshost.exe -应用程序错误
未知的软件异常(0x0eedfade),位置为0x7c812afb.
点击确定跳出 Runtime error 217 at 09822dd5.
再点击确认才抛出:
无法加载 DLL“UserDll.dll”: 动态链接库(DLL)初始化例程失败。 (异常来自 HRESULT:0x8007045A)。
Val是个返回值没错,但是mV也是个返回值,我该如何获取到Val和mV,2个返回值?
假如对方给DLL增加了点小动作的话,是不是我这种语句就会失败??
已经按照上述的去做了,但是每次都是抛出未知的软件异常,然后确定完了提示加载失败!!
仍然无法解决问题,个人怀疑是不是Delphi封装的DLL增加了初始化的限定,导致C#调用时候就抛出
Form1:xxxx.vshost.exe -应用程序错误
未知的软件异常(0x0eedfade),位置为0x7c812afb.
这种匪夷所思的错误,点击确认才再抛出:动态链接库(DLL)初始化例程失败(这是经历了2次错误才出来的)假如刻意把封装转移位置,该错误就不再出现,只是提示
无法加载 DLL“UserDll.dll”: 动态链接库(DLL)初始化例程失败 (这DLL不存在提示这是正确的)
个人感觉是那样,错误里还含有一个runtime error at 217 09822dd5 这个错误。
感觉就是非法调用了此dll引发了系统错误。确认是对方dll有特殊处理的话可能问题就好解决多了。
如果加载都失败,那就容易判断问题了
C#内用loadlibrary去加载?
如何实现?
还请帮忙给个例子,谢谢!
public delegate int FARPROC();[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct HINSTANCE__ {
/// int
public int unused;
}public partial class NativeMethods {
/// Return Type: HMODULE->HINSTANCE->HINSTANCE__*
///lpFileName: LPCTSTR->LPCWSTR->WCHAR*
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint="LoadLibraryW")]
public static extern System.IntPtr LoadLibraryW([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPTStr)] string lpFileName) ;
/// Return Type: FARPROC
///hModule: HMODULE->HINSTANCE->HINSTANCE__*
///lpProcName: LPCSTR->CHAR*
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint="GetProcAddress")]
public static extern FARPROC GetProcAddress([System.Runtime.InteropServices.InAttribute()] System.IntPtr hModule, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string lpProcName) ;}
1楼的方法解决了2个返回值的问题。OVER