Документация, на которую вы ссылаетесь, очень скудна, поэтому для ответа на вопрос нам нужно немного угадать.
Вам нужны следующие функции:
aResult PCLENTRY PclGetField (aDHandle fdh, anInt eno, aString data);
//Retrieves the formatted value of a field from a file buffer.
aResult PCLENTRY PclGetFieldLen (aDHandle fdh, anInt eno, anInt *length);
//Gets the length of a field.
Чтобы точно знать, как с этим справиться, нам нужно больше информации:
- Что оценивает макрос
PCLENTRY
? Я собираюсь предположить __stdcall
, но вам нужно будет проверить файл заголовка.
- Что такое
aResult
? Я собираюсь предположить int
, но вам нужно будет проверить файл заголовка.
- Что такое
aDHandle
? Я собираюсь предположить void*
или INT_PTR
, но вам нужно будет проверить файл заголовка.
- Что такое
anInt
? Я собираюсь предположить int
, но вам нужно будет проверить файл заголовка.
- Какой набор символов используется? ANSI или Unicode? Я собираюсь принять ANSI.
Вам нужно позвонить по номеру PclGetFieldLen
, чтобы узнать, насколько большой буфер вам нужен. А затем вы выделите этот буфер и вызовете PclGetField
, чтобы заполнить его. Вам необходимо выяснить, включает ли значение, возвращаемое PclGetFieldLen
, нулевой терминатор или нет. Я предполагаю, что это не так.
С этими допущениями вы бы написали пинвоук так:
[DllImport("pfxlibn.dll", CallingConvention=CallingConvention.Stdcall)]
public static extern int PclGetFieldLen(fdh IntPtr, int eno, out int length);
[DllImport("pfxlibn.dll", CallingConvention=CallingConvention.Stdcall,
CharSet=CharSet.Ansi)]
public static extern int PclGetField(fdh IntPtr, int eno, StringBuilder data);
Затем вы можете вызывать функции следующим образом:
IntPtr fdh = .... // whatever function creates the database handle
int eno = .... // get the field number from somewhere
int length;
int res = PclGetFieldLen(fdh, eno, out length);
//check res for errors
StringBuilder data = new StringBuilder(length);
res = PclGetFieldLen(fdh, eno, data);
string field = data.ToString();
Поскольку мы не знаем всех деталей, в этом ответе есть куча неизвестных. У вас есть файл заголовка, и вы можете обратиться к поставщику библиотеки для разрешения неизвестных. Но, надеюсь, приведенный выше план говорит вам, на какие вопросы нужно ответить.