1


0

私のCプログラムの何が問題になっていますか?

cppファイル:

#include
#include
#include "Hello.h"
#include "windows.h"
#include "stdafx.h"

typedef void(__stdcall *Print_)();

int main(){

  HINSTANCE hDll;   //DLL句柄
  Print_ print_;  //函数指针
  hDll = LoadLibrary("Hello.dll");

  if (hDll != NULL)
   {

    print_ = (Print_)GetProcAddress(hDll,"[email protected]");
    if(print_!=NULL)
    {

     print_();
    }
    FreeLibrary(hDll);
   }
 return 0;

}

3 回答


10


マクロを検討してください。

#define HINSTANCE "hDll"

およびその使用:

HINSTANCE hDll;   //DLL句柄

前処理後は次のようになります。

"hDll" hDll;

`" hDll "`は有効な型ではないため、 `hDll`が宣言されていないため、明らかにエラーです。


2


削除する

#define HINSTANCE "hDLL"

C4627の警告を削除するには、https://stackoverflow.com/users/187599/mike-dinsdale [Mike Dinsdale] 'で示されるように、 #include" stdafx.h "`を最上部(最初の#include)に移動します。 ■https://stackoverflow.com/questions/2627112/whats-wrong-in-my-c-program/2627304#2627304[answer]。 これはおそらく、 `LoadLibrary、` GetProcAddress`、および `FreeLibrary`のエラーを解決します。

#include "stdafx.h" // moved up
#include
#include
#include "Hello.h"
#include "windows.h"


2


プリコンパイル済みのヘッダーの問題でしょうか? いくつかのプロジェクト設定では、VC ++は #include" stdafx.h "`の前のものをスキップします。これは、C4627の警告の原因であると思われます。 他の `#include`の前に #include "stdafx.h" `を移動しようとしましたか?