我正面临从C#调用Delphi 7 DLL文件的问题。我是C#的新手,不太了解Delphi,而且我不需要非常了解这些。我只需要尽快解决这个问题。“尝试读取或写入受保护的内存,这通常表示其他内存已损坏。”来自C#的Delphi7 DLL
我想从C#调用dll,但出现此错误:“尝试读取或写入受保护的内存,这通常表示其他内存已损坏。”
我不知道它为什么会发生。正如你将会在我的Delphi代码中看到的那样,我并没有试图返回任何值。我只需要在COM端口上发送一些命令。请如果有人能帮助我离开这里:(
德尔福DLL的代码:
library Project2;
uses
SysUtils,
ComPort,
Classes;
var com1:TComport ;
{$R *.res}
procedure moveforward; export;
begin
com1.WriteAnsiString('#20 P1528 CR'+sLineBreak);
com1.WriteAnsiString('#7 P1465 CR'+sLineBreak);
end;
procedure movebackward; export;
begin
comport1.WriteAnsiString('#7 P1528 CR'+sLineBreak);
comport1.WriteAnsiString('#20 P1465 CR'+sLineBreak);
end;
procedure stopmove;export;
begin
comport1.WriteAnsiString('#20 P1500 CR'+sLineBreak);
comport1.WriteAnsiString('#7 P1500 CR'+sLineBreak);
end;
procedure catch; export;
begin
comport1.WriteAnsiString('#2 P2120 T2000 CR'+sLineBreak); //arm
comport1.WriteAnsiString('#30 P2260 T500 CR'+sLineBreak); //gripper
end;
procedure initialize; export;
begin
comport1.WriteAnsiString('#2 P2184 T1000 CR'+sLineBreak); //arm
comport1.WriteAnsiString('#30 P1980 T2000 CR'+sLineBreak); //gripper
end;
exports
moveforward, movebackward, stopmove, catch, initialize;
begin
end.
C#代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("Project2.dll")]
public static extern void moveforward();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
moveforward();
}
}
}
任何帮助将真正的赞赏
你应该添加一个delphi标签。 – 2012-02-02 01:37:27
'com1'或'comport1'? – 2012-02-02 03:06:31
当然,你可以用纯C#做这个,从而避免pinvokes和额外的本地模块 – 2012-02-02 07:49:16