У меня есть Delphi DLL, которую я не написал, но мне нужно позвонить из приложения C # ASP.NET 3.5. Вот определение функции, которое я получил от разработчиков:
function CreateCode(SerialID : String;
StartDateOfYear, YearOfStartDate, YearOfEndDate, DatePeriod : Word;
CodeType,RecordNumber,StartHour,EndHour : Byte) : PChar;
external 'CreateCodeDLL.dll';
А вот мой код C #:
[DllImport( "CreateCodeDLL.dll",
CallingConvention = CallingConvention.StdCall,
CharSet=CharSet.Ansi)]
public static extern IntPtr CreateCode( string SerialID,
UInt16 StartDateOfYear,
UInt16 YearOfStartDate,
UInt16 YearOfEndDate,
UInt16 DatePeriod,
Byte CodeType,
Byte RecordNumber,
Byte StartHour,
Byte EndHour);
И, наконец, мой вызов этому методу:
//The Inputs
String serialID = "92F00000B4FBE";
UInt16 StartDateOfYear = 20;
UInt16 YearOfStartDate = 2009;
UInt16 YearOfEndDate = 2009;
UInt16 DatePeriod = 7;
Byte CodeType = 1;
Byte RecordNumber = 0;
Byte StartHour = 15;
Byte EndHour = 14;
// The DLL call
IntPtr codePtr = CodeGenerator.CreateCode(serialID, StartDateOfYear,
YearOfStartDate, YearOfEndDate, DatePeriod, CodeType,
RecordNumber, StartHour, EndHour);
// Take the pointer and extract the code in a string
String code = Marshal.PtrToStringAnsi(codePtr);
Каждый раз, когда я заново компилирую этот точный код и запускаю его, он возвращает другое значение. Ожидаемое значение представляет собой 10-значный код, состоящий из цифр. Возвращаемое значение на самом деле 12 цифр.
Последняя важная информация заключается в том, что у меня есть тестовый .EXE с графическим интерфейсом, который позволяет мне тестировать DLL. Каждый тест с использованием .EXE возвращает одно и то же 10-значное число (ожидаемый результат).
Итак, я должен верить, что я неправильно объявил свой вызов DLL. Мысли?