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
、2番目のパラメーターとしてaを渡そうとすると、再び文句を言います。
編集1:
tlbはhttp://www.stackoverflow.com/questions/4184306への回答の一部としてGolezからのものです-上記のコードは彼の回答からのものです-これは私がadsiを機能させるために持っていた問題と同じです。
私はW764ビットを使用しています-adsidllは32ビットなので、違いはありません。
編集2:
私は盲目的にコードをたどったので、そこでヒットしたエラーのために問題が関数にあると誤って思いました。いくつかのエラートラップをスローした後、オブジェクトが作成されていないようです。もちろん、オブジェクトに値を割り当てようとすると、avがスローされます。
明らかなことを最初に指摘したので、答えが割り当てられました!