接续帖http://topic.csdn.net/u/20100528/16/6ac8563f-54c3-492d-97ca-dee01c93073b.htm
chpst 2010-07-23 04:11:02 http://topic.csdn.net/u/20100528/16/6ac8563f-54c3-492d-97ca-dee01c93073b.html
那个问题绕过去了。我用delphi完成了工作,在c++build中仍没通过。但有点心不甘。在c#vs2008中都能过。
附代码
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;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region 定义调用Delphi写的DLL
///
/// 定义调用Delphi写的DLL
///
private class castnt
{
//定义DLL文件名,此文件路径要加到系统Path中
private const string _fileDll = @"castnt.dll";
[DllImport(_fileDll, EntryPoint = "OpenCommPort", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int OpenCommPort(int intProt);
[DllImport(_fileDll, EntryPoint = "CloseCommPort", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern string CloseCommPort();
[DllImport(_fileDll, EntryPoint = "ReadTime", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
//C#中的申明
// public static extern int ReadTime(int intDevno, ref byte[] strGet);
public static extern int ReadTime(int intDevno, ref StringBuilder strGet);
[DllImport(_fileDll, EntryPoint = "ReadTime", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ReadVersion(int intDevno, ref StringBuilder strGet);
//function ReadVersion(intDevno: Integer; var strGet: Pchar): Integer; stdcall; external 'castnt.dll';
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
int intOpen;
intOpen = castnt.OpenCommPort(4);
if (intOpen == 1)
MessageBox.Show("串口打开成功");
else
MessageBox.Show("串口打开失败");
}
private void button2_Click(object sender, EventArgs e)
{
int intReturn;
StringBuilder strGet;
strGet = new StringBuilder();
intReturn =castnt.ReadTime(1, ref strGet);
if (intReturn == 1)
{
//Rtb.Text = System.Text.Encoding.Default.GetString(strGet);
Rtb.Text = strGet.ToString();
MessageBox.Show("成功");
}
else
MessageBox.Show("失败");
}
private void button3_Click(object sender, EventArgs e)
{
int intReturn;
StringBuilder strGet;
strGet = new StringBuilder();
intReturn = castnt.ReadVersion(1, ref strGet);
if (intReturn == 1)
{
Rtb.Text = strGet.ToString();
MessageBox.Show("成功");
}
else
MessageBox.Show("失败");
}
//function OpenCommPort(intProt: Integer): Integer; stdcall; external 'castnt.dll';
//procedure CloseCommPort(); stdcall; external 'castnt.dll';
//function ReadTime(intDevno: Integer; var strGet: Pchar): Integer; stdcall; external 'castnt.dll'; //读取日期时间
}
}
太奇怪了。
我认为就是是传值那个参数没写对。大家有兴趣研究下。