トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Win32API
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ DLL


___

■ LoadLibrary

SYNTAX HMODULE LoadLibrary( LPCTSTR path // DLL file PATH ( FullPath || FileName ) ); DESC DLL を呼び出し Process の Address 空間に map する CntRef をひとつ増やす Program は { data, 命令 }.( Instruction )でできていることの証明 変数: data の置かれている, Memory のアドレスへの Label( 名前 ) 関数: 命令の置かれている, Memory のアドレスへの Label( 名前 ) -> やはり, 基本は何もかわっていない POINT Address が UserAdress にあることに注目 -> OS 本体に App が直接アクセスさせないための安全措置 Program を Rebuild しなくても動的に機能の追加が可能 POINT 取得したアドレスを適切な関数型に変換
    typedef int (*FN)( HWND, LPCTSTR, LPCTSTR, UINT );
    {
      // File 名なら 検索順どおり
      HINSTANCE h = LoadLibrary( "user32.dll" );
      // FullPath
      HINSTANCE h = LoadLibrary( "c:/windows/user32.dll" );

      FN f;
      f = (FN)(GetProcAddress( h, "MessageBoxA"));
      (*f)( 0, "koreha", "yoberu", MB_OK );
    }

    {
      hDll = LoadLibrary(_T("libcgc.dll"));
      COMPILE_PS3 DllCompile;
      DllCompile = (COMPILE_PS3)GetProcAddress( hDll, "compile_program_from_string" );
      uint32_t ret = DllCompile( source.c_str(), "sce_fp_rsx", 0, option, &buffer );
    }
// 0x77d3058a // 2G 以下 TCHAR str[NAME_SIZE]; wsprintf( str, "adr %08x", f); dws( str ); void func(){ .... } { int adr = ( (int)func ); ( *( (FN)adr ) )(); } SYNTAX BOOL FreeLibrary( HMODULE ); DESC refcnt をひとつ減らす. ( 0 ならば ProcessSpace から unmap ) RET 0 : SUCCESS
___

■ GetProcAddress

SYNTAX HINSTNCE GetProcAddress( HMODULE, LPCTSTR ); DESC DLL がもつ Export された関数の Address をえる WARNING C Linkage extern "C" をしないと, 名前修飾 のため検索に失敗する
    // dll.cpp
    // ERROR
    __declspec( dllexport ) func();

    // OK
    extern "C" __declspec( dllexport ) func();

    // main.cpp
    GetProcAddress( h, "func" );
POINT __declspec( dllexport )宣言で DLL file 内に 関数名が記録される extern "C" で 名前修飾 をふせぐ ( func )という名前で記録させる

NINJAIDX 17