我正面臨從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