【发布时间】:2011-08-22 11:44:11
【问题描述】:
我在 Delphi 中静态导入一个动态库 (DLL) 并尝试访问其功能。
这是我试图访问的特定 C 函数减速:
int flann_radius_search_double (flann_index_t index_ptr, /* the index */
double* query, /* query point */
int* indices, /* array for storing the indices found (will be modified) */
double* dists, /* similar, but for storing distances */
int max_nn, /* size of arrays indices and dists */
float radius, /* search radius (squared radius for euclidian metric) */
struct FLANNParameters* flann_params);
这是我在 Delphi 中的减速:
function flann_radius_search_double(index_ptr: flann_index_t;
var query: double; var indices: longint; var dists: double;
max_nn: longint; radius: single; var flann_params: FLANNParameters): longint;
cdecl; external External_library Name 'flann_radius_search_double';
我访问了这样的函数:
type
TDoubleArray = array[0..1000] of double;
PDoubleArray = ^TDoubleArray;
TIntArray = array[0..1000] of Integer;
PIntArray = ^TIntArray;
...
... <other unrelated code>
var
Indicies:TIntArray;
PIndicies:PIntArray;
Dists:TDoubleArray;
PDists:PDoubleArray;
...
begin
...
PIndicies:=@Indicies;
PDists :=@Dists;
radius_s:=flann_radius_search_double(idx ,&PMyArray^[0,0],Pindicies^[0],&PDists^[0],1000,10,&DEFAULT_FLANN_PARAMETERS);
它不工作,看起来很遥远:*( 非常感谢您的帮助!
编辑:我修复了双/单错误,但是当我尝试使用 @Indicies[0] 而不是 Indicies[0] 时出现错误:
错误:通过 var 调用 arg 编号。 3 必须完全匹配:得到“指针” 预期为“LongInt”
【问题讨论】:
-
您也必须更改进口声明!从 var indices: Integer 更改为 indices: Pinteger,就像我说的和 Rudy 演示的那样。你也必须更改导入声明!从 var 索引更改:整数到索引:Pinteger,就像我说的和 Rudy 演示的那样。
标签: c arrays delphi pointers dll