C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: C++/CLIでWin32APIを呼び出したい


(過去ログ 133 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■78364 / inTopicNo.1)  C++/CLIでWin32APIを呼び出したい
  
□投稿者/ 綾瀬さとみ (21回)-(2016/01/11(Mon) 18:27:29)

分類:[C++/CLI] 

C++/CLIでWin32APIを呼び出し
まずはボタンを押したら
スレッドが走るようにしたいのですが
http://wisdom.sakura.ne.jp/system/winapi/win32/win143.html
ここを参考に
DWORD WINAPI ThreadFunc(LPVOID hWnd) {
}
DWORD dwID;
CreateThread(NULL , 0 , ThreadFunc , (LPVOID)hWnd , 0 , &dwID);
これらを色んなところに記述してみましたが
エラーが出てばっかりです。
どこに記述したらいいかわかりません。
ご協力お願いします。

---------------------------------------------------------------------------------
Source.cpp
---------------------------------------------------------------------------------
#include "MyForm.h"
using test;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// メイン ウィンドウを作成して、実行します
Application::Run(gcnew MyForm());

return 0;
}
---------------------------------------------------------------------------------
MyForm.cpp
---------------------------------------------------------------------------------
#include "MyForm.h"
#include <windows.h>
---------------------------------------------------------------------------------
MyForm.h
---------------------------------------------------------------------------------
#pragma once

namespace test {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// MyForm の概要
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
}

protected:
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
~MyForm()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;

private:
/// <summary>
/// 必要なデザイナー変数です。
/// </summary>
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
/// <summary>
/// デザイナー サポートに必要なメソッドです。このメソッドの内容を
/// コード エディターで変更しないでください。
/// </summary>
void InitializeComponent(void)
{
/*-------------------------------------省略-------------------------------------*/
}
#pragma endregion

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
}


};
}
---------------------------------------------------------------------------------
引用返信 編集キー/
■78366 / inTopicNo.2)  Re[1]: C++/CLIでWin32APIを呼び出したい
□投稿者/ Azulean (575回)-(2016/01/11(Mon) 18:35:02)
2016/01/11(Mon) 18:36:02 編集(投稿者)

まずは、windows.h とかその辺のインクルードをすべきなのでしょうね。

そもそも、なぜ、Win32API のスレッド関数を使う必要があるのですか?
C++/CLI なんですから、.NET の Thread クラスを使った方が良いと思うのですが、あえて使う理由はありますか?

(ランタイムの絡みもあるので、Win32API のスレッド関数を直接使って良い状況なのかも疑問)
引用返信 編集キー/
■78369 / inTopicNo.3)  Re[2]: C++/CLIでWin32APIを呼び出したい
□投稿者/ 綾瀬さとみ (22回)-(2016/01/11(Mon) 18:56:10)
ご返信ありがとうございます。
単純にWin32をやってみたかったのですが
GUIは手間なので.NETを使うことにしました。
GUIはC++よりC#の方がいいのかなとは思っています。
よろしくお願いします。
引用返信 編集キー/
■78375 / inTopicNo.4)  Re[3]: C++/CLIでWin32APIを呼び出したい
□投稿者/ Azulean (577回)-(2016/01/11(Mon) 21:33:05)
.NET と絡めなくても、Visual C++ でスレッドを作る場合には注意することがあります。
その辺もきちんと確認しておいた方が良いでしょう。

https://msdn.microsoft.com/ja-jp/library/7t9ha0zh.aspx
引用返信 編集キー/
■78387 / inTopicNo.5)  Re[4]: C++/CLIでWin32APIを呼び出したい
□投稿者/ 774RR (364回)-(2016/01/12(Tue) 07:18:10)
その辺の native Win32 な何かを積極的に使いたいのであれば C++/CLI ではなくて C++ を推奨。
C++/CLI と C++ はまったく別物。
C++/CLI は native/manage の両方を理解している人でないと使いこなせないよ。
native Win32API を使うのであれば純粋 C++ から入るほうがいいと思う。

ちなみにオイラも過去に書いたプログラムすべてで CreateThread は実用に供してないよ。制約多すぎる。
そういう事情を自分で情報収集できる人でないと、今時 C++ は勧められない。
「やってみたかった」程度の動機で使うにはいろいろと厄介ごとが多すぎ
引用返信 編集キー/
■78388 / inTopicNo.6)  Re[5]: C++/CLIでWin32APIを呼び出したい
□投稿者/ 綾瀬さとみ (23回)-(2016/01/12(Tue) 08:29:17)
ご返信ありがとうございまうす。
C++/CLIでGUIを作成して
Win32APIをC++で書くと言う事は出来ないのでしょうか?
引用返信 編集キー/
■78389 / inTopicNo.7)  Re[6]: C++/CLIでWin32APIを呼び出したい
□投稿者/ Hongliang (393回)-(2016/01/12(Tue) 08:51:37)
> C++/CLIでGUIを作成して
> Win32APIをC++で書くと言う事は出来ないのでしょうか?
できないわけではないですが、Microsoftからして
Visual StudioのC++/CLI用プロジェクトテンプレートからWinFormを削除し(2012からでしたっけ)、
WPFビルドには一貫して非対応という感じで、全く推奨していませんね。
引用返信 編集キー/
■78390 / inTopicNo.8)  Re[6]: C++/CLIでWin32APIを呼び出したい
□投稿者/ 774RR (365回)-(2016/01/12(Tue) 08:59:33)
質問が「できるかできないか」だと、答えは「できる」に決まっているが、
質問が「そういう構成を推奨するか」だと、答えは「推奨しない」だ。

異言語混在ってことは、使う言語全てをそれなりに理解しておかないといけないってことだ。
いきなりそれは結構難しいんぢゃないかな。特に今回の話題は
・ Win32API は unmanage (native)
・ C++/CLI っつか .NET の GUI 部品は manage
という、いわば「世界線が異なる」ものを混在させようってことになるわけだ。
unmanage と manage でうまくつじつまが合わせられればいいけど、そう簡単にはいかないとおもうよ

どうしてもやりたいなら
C++ unmanage な世界で1つの処理を完結させて
C# VB manage な世界からはその処理に対する入出力だけを marshal する
C++/CLI の出番は、両者のインターフェイスのみ
ってあたりから始めるといいと思う。

引用返信 編集キー/
■78412 / inTopicNo.9)  Re[7]: C++/CLIでWin32APIを呼び出したい
□投稿者/ 綾瀬さとみ (24回)-(2016/01/12(Tue) 19:17:46)
皆様ご返答ありがとうございます。
今やってるソフトは
C#とC++/CLIで作成完了しています。
今は純粋なWin32APIでGUIを作成し終えたところです。
C++/CLIに関しては空のプロジェクトからウィンドウを追加して
http://y-okamoto-psy1949.la.coocan.jp/booksetc/introvcpp/vs2012FormApp/
このホームページを見て設定しました。

ちなみにC++ unmanagedというのはATLやMFCの事でしょうか?

本題のC++/CLIでWin32APIのやり方をご存知の方はご協力頂けましたら嬉しいです。

引用返信 編集キー/
■78414 / inTopicNo.10)  Re[8]: C++/CLIでWin32APIを呼び出したい
□投稿者/ Hongliang (397回)-(2016/01/12(Tue) 19:27:23)
> ちなみにC++ unmanagedというのはATLやMFCの事でしょうか?
unmanagedという言葉は、managedが存在する世界で使用されるものです。
managedというのは.NETによってメモリが管理される領分といった程度の意味であり、
unmanagedは、.NETにおいてメモリが管理されない領分を指します。
つまり、C++/CLIにおける、ネイティブコードの部分ですね。
C++/CLIはmanagedなコードとunmanaged(native)なコードを混在することができるのが特徴です。

> 本題のC++/CLIでWin32APIのやり方をご存知の方はご協力頂けましたら嬉しいです。
結局のところ、普通のC言語での関数呼び出しと何ら変わりません。
必要なヘッダを#includeし、libファイルを参照して、です。
ことさらに「Win32APIのやり方」なんてものは存在しません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -