Re: Использование unmanaged DLL из C#
От: Arslan Украина  
Дата: 20.07.03 12:55
Оценка:
Здравствуйте, DrL, Вы писали:

DrL>function Test(var a:integer) : integer;export;

DrL>[DllImport("mydll", CallingConvention = CallingConvention.StdCall)]
DrL> public static extern int Test(int a);
DrL>Результатом является всегда одно и тоже число, причем независипо от
DrL>CallingConvention и передачи параметра ref или [In, Out].
в шарпе int — 32 бита, а в паскале (если не ошибаюсь) 16 бит
поэтому думаю тебе надо вызывать
public static extern short Test(short a);


DrL> function LInv(var n : integer; //размер динамических массивов

DrL> var dReIn : array of double;//динамический массив (вход)
DrL> var dImIn : array of double;//динамический массив (вход)
DrL> var dReOut : array of double;//динамический массив (выход)
DrL> var dImOut : array of double//динамический массив (выход)
DrL> ) : integer;export;

а эту функцию надо объявлять так:

using System.Runtime.InteropServices;
...
static extern short LInv(short n,
[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] double[] dRemIn,
[In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] double[] dImIn,
[Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] double[] dRemOut,
[Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] double[] dImOut)
... << RSDN@Home 1.1 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.