2009-07-23 9 views
0
HANDLE Proc; 
HMODULE hDLL; 
hDLL = LoadLibrary(TEXT("mscoree.dll")); 
if(hDLL == NULL) 
    cout << "No Dll with Specified Name" << endl; 
else 
    { 

    cout << "DLL Handle" << hDLL << endl<<endl; 
    cout << "Getting the process address..." << endl; 
    Proc = GetProcAddress(hDLL,"GetRequestedRuntimeVersion"); 

    if(Proc == NULL) 
     { 
     FreeLibrary(hDLL); 
     cout << "Process load FAILED" << endl; 
     } 

    else 
     { 
     cout << "Process address found at: " << Proc << endl << endl; 
     LPWSTR st;DWORD* dwlength; ;DWORD cchBuffer=MAX_PATH; 
     HRESULT hr=GetCORSystemDirectory(st,cchBuffer,dwlength); 
     if(hr!=NULL) 
     { 
      printf("%s",hr); 
     } 
     FreeLibrary(hDLL); 
     } 
    } 

.NETインストールパスを取得するのが好きでしたが、リンカエラーが発生しています。GetCORSystemDirectory()の使用方法は?

エラーLNK2019:未解決の外部シンボル_GetCORSystemDirectoryあなたがのGetProcAddress()への2番目のパラメータとして「GetCORSystemDirectory」を渡す必要が

答えて

1

GetCORSystemDirectoryシグネチャを定義:

typedef HRESULT (__stdcall *FNPTR_GET_COR_SYS_DIR) (LPWSTR pbuffer, DWORD cchBuffer, DWORD* dwlength); 

は、関数ポインタを初期化:

FNPTR_GET_COR_SYS_DIR GetCORSystemDirectory = NULL; 

はにmscoree.dll及び使用から関数ポインタを取得:

GetCORSystemDirectory = (FNPTR_GET_COR_SYS_DIR) GetProcAddress (hDLL, "GetCORSystemDirectory"); 
if(GetCORSystemDirectory!=NULL) 
{ 
    ... 
    //use GetCORSystemDirectory 
    ... 
} 

要求どおり:

#ifndef _WIN32_WINNT    
#define _WIN32_WINNT 0x0600  
#endif 
#include <stdio.h> 
#include <tchar.h> 
#include <windows.h> 

typedef HRESULT (__stdcall *FNPTR_GET_COR_SYS_DIR) (LPWSTR pbuffer, DWORD cchBuffer, DWORD* dwlength); 
FNPTR_GET_COR_SYS_DIR GetCORSystemDirectory = NULL; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    HINSTANCE hDLL = LoadLibrary(TEXT("mscoree.dll")); 

    GetCORSystemDirectory = (FNPTR_GET_COR_SYS_DIR) GetProcAddress (hDLL, "GetCORSystemDirectory"); 
    if(GetCORSystemDirectory!=NULL) 
    { 
     TCHAR buffer[MAX_PATH]; 
     DWORD length; 
     HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH,&length); 

     // buffer should contain the folder name 
     // use it.. 

    } 

    return 0; 
} 
+0

if文が間違っています。 if(ptr!= 0){//使用} – sharptooth

+0

@sharptooth:ありがとう!それを訂正した。 – Indy9000

+0

GetCORSystemDirectoryに関するドキュメントを読み、その内容を理解してください。ここにリンクがあります http://msdn.microsoft.com/en-us/library/k0588yw5(VS.71).aspx – Indy9000

0

dot.obj _main機能で参照12 @ - それは、その関数の実装へのポインタを返します。次に、ポインタを適切にキャストし、それを介して関数を呼び出します。