我在使用Delphi 2010中的导入类型库时遇到问题,但在我的生活中无法解决如何修复它。
ActiveDs_TLB
定义了以下内容:
function SetSearchPreference(var pSearchPrefs: ads_searchpref_info; dwNumPrefs: LongWord): HResult; stdcall;
我认为这需要一个指向ads_searchpref_info数组的指针,但我无法执行以下操作:
SetSearchPreference(@MySearchPref,1);
因为我看到了可怕的E2033 Types of Actual and formal var parameters must be identical
错误
再向下,ActiveDs_TLB
定义:
function ExecuteSearch(pszSearchFilter: PWideChar; var pAttributeNames: PWideChar;
dwNumberAttributes: LongWord; out phSearchResult: Pointer):HResult; stdcall;
但是当我尝试传递nil
作为第二个参数时,它会再次抱怨。
tlb来自Golez作为http://www.stackoverflow.com/questions/4184306答案的一部分 - 上面的代码来自他的答案 - 这相当于我已经让adsi工作的问题。
我使用的是W7 64位 - 因为adsi dll是32位,所以不应该有所作为。
我错误地认为问题出在该函数上,因为我遇到了错误,因为我盲目地遵循了代码。抛出几个错误陷阱后,似乎永远不会创建对象,当我尝试为其赋值时,这当然会抛出av。
指派的答案是第一个指出明显的答案!
答案 0 :(得分:3)
如果它被定义为 var 参数,则意味着您应该只传递一个元素,并让Pascal处理指针。如果原始库期望一个数组,因为指针和数组在C中是可以互换的,那么你的TLB转换是错误的。
答案 1 :(得分:1)
第一个采用ads_searchpref_info
类型的参数。这可能不是指针。
在第二个,因为它是一个var
参数,你不能传递一个常量,它必须是一个变量,因为它希望能够更改它/传递信息。