【新手100分】C#调用DLL失败 - 报System.AccessViolationException 尝试读取或写入受保护的内存。这通常指示其它内存已损坏

孔南 2017-02-01 07:42:20
想玩一下【山大地纬】的医保嵌入式接口。它提供了seiproxy.dll 等类库供记账用。
因为是新手没玩过DLL,就按微软的一份教程尝试成功后进行了下列操作:
1、使用TlbImp输出SeiproxyTypeLib.dll 并用 Ildasm查看;
2、发现只有 Iproxy,CoClass_proxy两个接口和 CoClass_proxyClass 类;
3、在项目中引用 SeiproxyTypeLib.dll 并将嵌入式操作类型改为false;
4、编写代码如下:
static void Main(string[] args)
{
CoClass_proxyClass seiproxy = new CoClass_proxyClass();
int i = seiproxy.initialize("gzrybh#|yybm#|passwd#|syzhlx#0|");
}

尽管只有两行代码,但华丽丽地报错了(截图附后) :
System.AccessViolationException 尝试读取或写入受保护的内存。这通常指示其它内存已损坏。

后来断在第二行,发现第一行其实也没真正成功。
尝试搜索解决方案,如这个,但因笨难以发现问题所在。

求教:参照PB代码的话,要怎样改才能让代码正常运行
100分不成敬意,请高手笑纳!

================================================

================================================
以下是文档描述及PB示例代码:

(1)接口实例的创建(pb示例,各种开发工具方法不同):
Oleobject seiproxy                                 
seiproxy =create oleobject
vi= seiproxy.connecttonewobject(‘seiproxy’)
if vi<>0 then
messagebox(‘’,‘注册失败’)
return
end if

(2)接口登陆:
服务名称: initialize (pstr) returns long
vi=seiproxy. Initialize('gzrybh#|yybm#|passwd#|syzhlx#3|') 
if vi<>0 then
messagebox(‘医保接口登陆失败’,vi)
return
end if




btw: CSDN好像也有问类似问题的,如 http://bbs.csdn.net/topics/391036911
...全文
1212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxj714905510 2017-09-10
  • 打赏
  • 举报
回复
你好,请问你这个问题解决了么?
threenewbee 2017-02-02
  • 打赏
  • 举报
回复
控件/类型库本身是否注册成功,如果类型库是32bit的,你的程序集也要强制用32bit
孔南 2017-02-02
  • 打赏
  • 举报
回复
附上类库下载链接,供大侠们参考: http://pan.baidu.com/s/1c2suvW8 提取码 npgr
孔南 2017-02-02
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
至少先照着范例写对吧
谢谢您的回复,我确实没有照着范例写(没用过PB),源码的前三句我找不出C#对应写法: 既看不出实例化的哪个类(没有 seiproxy这样的类,应该不支持实例化一个命名空间吧), 也不清楚 connecttonewobject 是不是就是 new 的意思?但微软的例子中只用了 new。 可能的话,想烦请赐教这前三句该怎么写,谢谢!
Oleobject seiproxy                                 
seiproxy =create oleobject
vi= seiproxy.connecttonewobject(‘seiproxy’)
孔南 2017-02-02
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
控件/类型库本身是否注册成功,如果类型库是32bit的,你的程序集也要强制用32bit
谢谢版主,我在开发端和客户端在Win7x64和WinXPx86下都试过。我再重新试试,再谢!
Poopaye 2017-02-01
  • 打赏
  • 举报
回复
至少先照着范例写对吧

110,539

社区成员

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

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

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