這是調用代碼我用Delphi調用DLL,但仍然有一個錯誤
unit CY;
interface
uses windows;
type
TMember_Rd = Record
iID: integer;
sCode: Array[0..255] of char;
sName: Array[0..255] of char;
end;
PTMember_Rd = ^TMember_Rd;
function GetMember(sStore, sMachine: PChar; const sTrack, sCode, sVerify: PChar;
Member: PTMember_Rd; sError: PChar): Integer; stdcall; external 'Interface.dll';
implementation
end.
我需要調用一個GetMember功能和數據填寫到會員,如果有任何錯誤我可以從sError獲取消息。
如何調用此函數?
我不熟悉德爾福;我認爲我的錯誤在於指針。
以下是我的C#代碼工作
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace JFTest
{
public class JFService
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct PTMember_Rd
{
public Int32 id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sCode;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string sName;
}
[DllImport("Interface.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GetMember(StringBuilder sStore, StringBuilder sMachine, StringBuilder sTrack, StringBuilder sCode, StringBuilder sVerify, ref PTMember_Rd Member, [MarshalAs(UnmanagedType.LPStr)] string sError);
}
}
而且我也沒有對方的代碼,該dll是客戶發給我,他們沒有源代碼。
請顯示界面的另一邊。我認爲有一些C代碼。另外,請告訴我們Delphi的版本,以便我們判斷'Char'是一個字節寬還是兩個字節寬。 – 2013-04-24 16:19:25
我只知道這個接口在其他程序中工作,並且sError會返回unicode,我使用delphi 2010開發它。謝謝大衛。 – user2316439 2013-04-24 16:24:26
這是一個互操作問題。你有兩個不匹配的接口。如果你只顯示界面的一面,你不能指望我們回答。顯示另一面。還提供參數的文檔。對於指針參數,誰負責分配內存。輸入哪些參數,輸出哪些參數? – 2013-04-24 16:26:02