![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
元々スレッドの生成を
CreateThread(NULL, 0, ThreadFunc, (LPVOID)¶m, 0, &dwID);
としていたのですが、
生成したスレッドがC言語のライブラリを利用する場合、
CreateThread()ではなく_beginthread()を使うとMSDNに記載されていました。
そこでプログラムを_beginthread()に書き換えたのですが、
『error C2440: '関数' : 'DWORD (__stdcall *)(LPVOID)' から 'void (__cdecl *)(void *)' に変換できません。』
『warning C4024: '_beginthread' : の型が 1 の仮引数および実引数と異なります。』
とのエラーが表示されてしまいます。
アドバイスをよろしくお願いします。
#include <windows.h>
#include <process.h>
#define APP_NAME TEXT("Sample_MainWindow")
typedef struct _ThreadParam {
HWND owner;
POINT point;
} ThreadParam;
DWORD WINAPI ThreadFunc(LPVOID vdParam) {
・
(省略)
・
}
LRESULT CALLBACK WindowProc(
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
) {
ThreadParam param;
switch(uMsg) {
case WM_LBUTTONDOWN:
param.owner = hWnd;
param.point.x = LOWORD(lParam);
param.point.y = HIWORD(lParam);
_beginthread(ThreadFunc, 0, ¶m);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
No.1ベストアンサー
- 回答日時:
エラーメッセージの通りの問題です。
曰く、「引数の方が違う」
_biginthread()で使用するプロセス関数は「void processname(void *parameter)」で宣言する必要があります。
>DWORD WINAPI ThreadFunc(LPVOID vdParam) {
では、宣言形式を満たしていません。
ご指摘の通り、
VOID ThreadFunc(LPVOID vdParam) {
と変更することで正常にコンパイル出来ました。
呼び出し規約についての理解が不十分でした。
回答して頂きましてありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
戻り値を返す関数の前に(void)...
-
多重定義が起きている?--lnk20...
-
静的でないメンバ関数の呼び出...
-
C++にてtemplateで受け取った任...
-
DLLの関数呼び出しで引数がある...
-
既定のコンストラクタがありま...
-
(void)0 はどんな意味ですか
-
コールバックって・・・
-
C# Controls.Addで動的に配置し...
-
int main()、void main()、void...
-
組み込みマイコン
-
【gcc・cygwin】multiple defin...
-
VC++でGetKeyboardStateがうま...
-
コンパイルエラー: LNK2001
-
RENDERFILEについての質問です
-
C#でトーンカーブの作成
-
void main()って誰が最初?:AN...
-
クラス間でのクラスの共有?
-
マルチメディアタイマー
-
メンバ関数(メソッド)をマル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
Notepad++の関数リスト表示の変...
-
戻り値を返す関数の前に(void)...
-
ArduinoでMouse関数を使用して...
-
C++にてtemplateで受け取った任...
-
int main()、void main()、void...
-
多重定義が起きている?--lnk20...
-
C# KeyDownイベントでショート...
-
静的でないメンバ関数の呼び出...
-
VC++でGetKeyboardStateがうま...
-
C# Controls.Addで動的に配置し...
-
gcc: incompatible pointer type
-
void*型の配列について
-
const_castのつかいどころを教...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
(void)0 はどんな意味ですか
-
TimerProc コールバック関数を...
-
H8マイコンのシリアル通信につ...
-
DLLの関数呼び出しで引数がある...
おすすめ情報