作者iamso1 (可爱活泼小兽儿)
看板C_Sharp
标题[问题] 引入dll之後函式传回参数转换一问..
时间Tue Sep 1 01:27:08 2009
拍谢 想请教一下各位
我是使用C#引入c++的dll档来用
dll中有个函式是这样的
int CommRead(int index, int* id, char* function, char* data);
所以我在C#中就直接用dllimport去引入它
但是我在呼叫它的时候就有问题想问各位一下
我看C++的原始写法 呼叫这函式的内容是先在最上头宣告两个阵列
Func[10]跟Data[100]
然後函式这样用:
void __fastcall TFrmMain::Timer1Timer(TObject *Sender)
{
int i;
if (CommRead(0,&i,Func,Data) != 0)
{
LRece->Caption = AnsiString(Func) + " " + AnsiString(Data);
if (StrLen(Data) == 17) EUID->Text = AnsiString(Data+1);
else EUID->Text = "";
Count = 5;
}
else
if (--Count == 0) LRece->Caption = "";
}
我想问的是..
为什麽它上面函式明明传入的参数就是写:
(int index, int* id, char* function, char* data);
但是为什麽他这边呼叫的时候
里面却是用
CommRead(0,&i,Func,Data)呢?
第一个index还能了解 从第二个就不了解了..
&i这部分我不太懂 我重建的时候 是先放一个值给它 先忽略掉它
至於Func跟Data让我十分不解
怎麽会放阵列进去呢??
实际在c++上是可以跑的
但是我转成c# 这部分就没办法通过
我有尝试把他原本的函式改掉
在C#把指标的部分去掉改成
(int index, int id, char function, char data);
并且呼叫的部分
传入值改成
private void timer1_Tick_1(object sender, EventArgs e)
{
int i=1;
if (CommRead(0, i, Convert .ToChar(Func),Convert .ToChar(Data)) != 0)
{
label3.Text = Func.ToString() + " " + Data.ToString() ;
if (Data.Length == 17)
{
textBox1.Text = Data.ToString ();
}
else
{
label3.Text = "";
Count = 5;
}
}
else
if (Count == 0) label3.Text = "";
}
但是又会出现
无法将型别 'System.Char[]' 的物件转换为型别 'System.IConvertible'。
这错误
请问是哪里错呢??
它显示错的那行是在
if (CommRead(0, i, Convert .ToChar(Func),Convert .ToChar(Data)) != 0) 这
不过我还是不知道该怎麽解决才好呢...
所以想请问一下大家@@"
是我一开始就做错呢 还是後面才错
而且 我可以修改从dll汇入的函式吗?(把传入参数改掉的部分)
烦请解答了>"<
--
◣◥
◤◢ ◢ ◥ 喵~~~~~~~~~ 请‧尊‧重‧生‧命
◤
◢◤ ◎ ◎ ◥ ◤
以 认 养 代 替 购 买
◤◢ ●─● ◣ ◢
◢◤ ◥ ◢ ▄ ▄ 以 绝 育 代 替 扑 杀
◤◢ 请领养我 请领养我▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ψQSWEET
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.163.1.11
1F:→ petrushka:CommRead(0,&i,Func,Data)没错,所以你指标用法不熟吗? 09/01 14:23
※ 编辑: iamso1 来自: 218.163.10.201 (09/04 23:19)