2

Visual Studio で DLL をコンパイルしました (ソース コードは C++ で書かれており、ほとんど理解できません)。Scraper.hの一部を次に示します。

struct SWin
{
   char title[512];
   HWND hwnd;
};

SCRAPER_API bool ScraperGetWinList(SWin winList[100]);

今、私の Delphi アプリケーションで上記の関数を使用しようとしています:

type
  tWin = record
    title: String;
    hwnd: HWND;
  end;

function ScraperGetWinList(var WinList: Array of tWin): Boolean; external 'Scraper.dll';

var
  myWinList: Array [1..100] of tWin;

procedure TMainForm.GetWinListButtonClick(Sender: TObject);
begin
  ScraperGetWinList(myWinList);
  ...

プロジェクトがコンパイルされず、次のメッセージが表示されます:プロシージャ エントリ ポイント ScraperGetWinList could not be found in the dynamic link library: Scraper.dll .

私は何を間違っていますか?

4

3 に答える 3

1

エントリポイント関数をC++コードで実際にエクスポートしましたか?これは、ドットネットアプリで使用するためにVisualStudioでC++dllを初めてコンパイルしたときに本当に困惑しました。

たとえば、他の開発者がVB.netでアクセスできるように、管理されていないコードでプリンタードライバーを公開する必要がありました。これが私がしたことです。

foo.cppの場合:

extern "c" {
  ___declspec(dllexport) bool FooBar()
  {
     // Call some code on my cpp objects to implement foobar
  }
}

次に、foo.defというファイルで:

LIBRARY   "mylib"

EXPORTS
        FooBar 
        AnyOtherFunctionsItExports

これが私がそれを機能させる方法です。私は物事を可能な限り最善の方法でやっていないかもしれません。私はC++の経験に少し精通しており、主にWindowsでは動作しません。

于 2009-10-18T13:12:40.317 に答える