我遇到了一个问题,需要从C#调用Delphi 7 DLL文件。我对C#不太熟悉,也不需要太了解Delphi。我只需要尽快解决这个问题。
我试图从C#调用dll,但是我收到了这个错误:“尝试读取或写入受保护的内存。这通常表明其他内存已经损坏。”
我不知道为什么会出现这种情况。正如您在我的Delphi代码中看到的,我并没有尝试返回任何值。我只需要在COM端口上发送一些命令。如果有人能帮我解决这个问题,那就太好了:( Delphi DLL代码:
我试图从C#调用dll,但是我收到了这个错误:“尝试读取或写入受保护的内存。这通常表明其他内存已经损坏。”
我不知道为什么会出现这种情况。正如您在我的Delphi代码中看到的,我并没有尝试返回任何值。我只需要在COM端口上发送一些命令。如果有人能帮我解决这个问题,那就太好了:( Delphi 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();
}
}
}
非常感谢你的帮助