C#调用delphi的dll出现问题:外部组件发生异常。

DTWUJP 2010-07-02 05:56:22
登陆入口函数:
function loginserver(userid:pchar;pwd:pchar):Interger;far;stdcall

c#:

[DllImport("c:\\dll\\SI_Interface_H.dll", CharSet = CharSet.Ansi ,CallingConvention=CallingConvention.StdCall , EntryPoint = "LoginServer")]
private static extern int LoginServer(string userid, string pwd);

public bool YbLogin()
{
if (LoginServer( userID, "")==1)
{
return true;
}
else
{

return false;
}
}

调用:


clsuser user=new clsuser();

user.yblogin();

错误:外部组件发生异常


到底是哪里错了,这才是第一步,后面还有多个函数要调用,参数更复杂!!!
...全文
647 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Netmark 2010-08-29
  • 打赏
  • 举报
回复
同问 我也遇到了 我是两个string 参数
函数原型

function test(Const SerialNo: String; Const key: String;Const bAll: Boolean = True):String;

我用 string string bool 不行
stringbuilder string bool 也不行
都出现访问内存错误
前面两个第一个参数加上 ref 或者out 则

引发类型为“System.ExecutionEngineException”的异常
ljm475643905 2010-08-13
  • 打赏
  • 举报
回复
我也遇到了这错误,你如果有好的方法可以告诉我吗,关注中。。。。。 System.Text.Encoding.ASCII.GetBytes()用这个试试。我用这个在form下成功,在控制台下就失败了,纠结中。。。
DTWUJP 2010-07-06
  • 打赏
  • 举报
回复
还是搞不定,请求帮助
DTWUJP 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lianshaohua 的回复:]
LoginServer改成与delphi中一样的声明方式试试,
[/Quote]

delphi一点也不懂,请给我个例子可以吗?谢谢
DTWUJP 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 computerfox 的回复:]
引用 7 楼 dtwujp 的回复:

pchar在C#应该对应什么类型


pchar是字符串指针,对于用string 或者StringBuilder,用 ANSI 修饰。
从你的导入函数声明看,没有问题的!
你看看是否缺失了其他dll的支持?

YbLogin直接被调用能ok吗?如果不行,就从这里下手。
[/Quote]

用他的测试程序没有问题,返回值是1,
ztenv 2010-07-05
  • 打赏
  • 举报
回复
LoginServer改成与delphi中一样的声明方式试试,
tashiwoweiyi 2010-07-05
  • 打赏
  • 举报
回复
[img=http://www.52coding.net/zzx/21.gif]我是来学习的[/img]
捷哥1999 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dtwujp 的回复:]

pchar在C#应该对应什么类型
[/Quote]

pchar是字符串指针,对于用string 或者StringBuilder,用 ANSI 修饰。
从你的导入函数声明看,没有问题的!
你看看是否缺失了其他dll的支持?

YbLogin直接被调用能ok吗?如果不行,就从这里下手。

DTWUJP 2010-07-05
  • 打赏
  • 举报
回复
pchar在C#应该对应什么类型
DTWUJP 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lianshaohua 的回复:]
改成stringbuilder试试,应该同读/写内存的错误;
[/Quote]
能给个例子吗?我这样还是报错:
[DllImport("c:\\dll\\SI_Interface_H.dll", CharSet = CharSet.Ansi ,CallingConvention=CallingConvention.StdCall , EntryPoint = "LoginServer")]
private static extern int LoginServer(StringBuilder userid, StringBuilder pwd);

public bool YbLogin()
{
StringBuilder sb=new StringBuilder(254);
sb.Append("02600");
StringBuilder sb2=new StringBuilder(254);
sb2.Append(string.Empty);
if (LoginServer( sb, sb2)==1)
{
return true;
}
else
{

return false;
}
}

调用:


clsuser user=new clsuser();

user.yblogin();
ztenv 2010-07-05
  • 打赏
  • 举报
回复
改成stringbuilder试试,应该同读/写内存的错误;
DTWUJP 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mittermeyer 的回复:]
从声明了来看我觉得没什么问题。
我觉得是SI_Interface_H.dll工作不正常,是不是这个文件还依赖于其它得文件,而那些文件不在工作目录下。
[/Quote]

所有的文件我都集中放在一个文件夹里了,他的测试接口的程序运行正常
是不是参数申明的不对,网上也找不到相关的资料
chuzhaowei 2010-07-02
  • 打赏
  • 举报
回复

[DllImport(@"EncryptClass.dll")]
privatestatic extern void EncryptNet(string AContent, StringBuilder AResult, int ABufferSize);

public static string EncryptString(string pStr, int pSize)
{
int BUFFER_SIZE = pSize;
StringBuilder sb = new StringBuilder(BUFFER_SIZE);
EncryptNet(pStr, sb, BUFFER_SIZE);
return sb.ToString();
}
Mittermeyer 2010-07-02
  • 打赏
  • 举报
回复
从声明了来看我觉得没什么问题。
我觉得是SI_Interface_H.dll工作不正常,是不是这个文件还依赖于其它得文件,而那些文件不在工作目录下。
兔子-顾问 2010-07-02
  • 打赏
  • 举报
回复
不确定。试试
string -> StringBuilder

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧