web调用dephi的dll,发生《尝试读取或写入受保护的内存。这通常指示其他内存已损坏。》 错误

ys_honghu 2009-04-07 05:53:03
dephi:
Function Test(out AdvInfo: Pchar; out LenAdvInfo:integer):string; stdcall;
begin
result := '中国人民万岁!';
lenadvinfo:=length('中国人民万岁!');
advinfo:=pchar(UTF8Encode('中国人民万岁!'));
end;

c#:
[DllImport("PrgLISDLL.dll", EntryPoint = "Test", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int Test(out StringBuilder AdvInfo, out int LenInt);

StringBuilder AdvInfo = new StringBuilder(2048);
int LenInt = 0;
Test(out AdvInfo, out LenInt);
byte[] btXM = Encoding.Default.GetBytes(AdvInfo.ToString());
string sXM = System.Text.Encoding.UTF8.GetString(btXM);
Response.Write(sXM);

发生如下错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

郁闷啊,这个问题困惑我好久了,有没有做过的朋友告诉我怎么做
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
youdianjuanl 2009-04-08
  • 打赏
  • 举报
回复
加个unsafa关键字(关键字可能错了 大概是这个形状的) 不安全的

还有一种思路 用kernel32.dll导入 这个DLL 应该是专门管理外部DLL文件的 我也是调用的dephi的动态库
c/s b/s 都没有问题 但是有一点要注意 有时候 在dephi环境下调试一点问题也没有..但拿到别的项目就有问题
可以先尝试用regsvr32.exe这个文件注册一下 如果报内存错误 就先改dephi动态库 直到不出现内存问题
如果提示信息是什么什么“已注册。。但无法加载。。”(错误信息记不清了) 再可以考虑一下dephi的动态库
的延时问题 我就出现过这样的情况 那时候笑称 太高效也有坏处
kernel32.dll导入外部DLL的思路 先将dephi的动态库
动态库函数 在.net中注册 然后转换为委托 然后用C#代码 实例划该委托 就可以调用了 好像也会出现什么错误
感兴趣 + QQ342386706
回帖是种美德 嘎嘎
ys_honghu 2009-04-08
  • 打赏
  • 举报
回复
StringBuilder 就是类级成员呀,可是还是不行
jingkunli 2009-04-07
  • 打赏
  • 举报
回复
在WEB端调用时你可能要把传入的参数,即out StringBuilder AdvInfo, out int LenInt 声明成类级成员,这样的话,理论上才可能开劈内存单元,因为,DEPHI或者C++的一些DLL很有可能跟内存指针有关,LZ不妨试试!
jingkunli 2009-04-07
  • 打赏
  • 举报
回复
在WEB端调用时你可能要把传入的参数,即out StringBuilder AdvInfo, out int LenInt 声明成类级成员,这样的话,理论上才可能开劈内存单元,因为,DEPHI或者C++的一些DLL很有可能跟内存指针有关,LZ不妨试试!
wanghao3616 2009-04-07
  • 打赏
  • 举报
回复
。。。 c++的可以 、
就像楼上说的 掉dephi的应该没什么 解决方案了
你考虑下 把dephi的业务 做成webservies吧
ys_honghu 2009-04-07
  • 打赏
  • 举报
回复
楼上的,还是没有解决啊,网上已经找了很久了,试了很多方法,还是不行
moonshineidolon 2009-04-07
  • 打赏
  • 举报
回复
.net的系统在框架下运行。delphi的程序在系统下运行,属于运行在两个不同的范围。
开辟的内存空间啊,堆栈啊都不在同一个地方。这样肯定有问题的。

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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