No.1ベストアンサー
- 回答日時:
# CreateWindow関数を使う必要性がわからないけど
Module^ m = Assembly::GetExecutingAssembly()->GetModules()[0];
HINSTANCE hInst= (HINSTANCE)Marshal::GetHINSTANCE(m).ToPointer();
ありがとうございます!!
一行目に関しては、ある事に関して.NETのクラスライブラリだけでは手詰まり感が出てきたので、という意味です。
後の2行は非常に助かりました。前提となっている名前空間は
System::Reflection;
System::Runtime::InteropServices;
ですね?
初めてWindowsAPIを使ってウインドウを表示させることができました!
気になるのですが、見落としか見方が悪いだけかもしれませんが、MSDNを見てもそれらしい事が見つかりませんでした。
これらを使用するにあたって、何らかの解放処理は必要でしょうか?
No.4
- 回答日時:
>これらを使用するにあたって、何らかの解放処理は必要でしょうか?
おそらく何も必要ないです。
No.3さん
>main関数の引数にアーギュメントが文字列の配列で渡されて来る宣言は、コンソールアプリケーションの場合で、Windowsフォームアプリケーションの場合、WinMainがエントリポイントになる筈です。
SUBSYSTEMオプションにWINDOWSが指定されていると、
ENTRYポイントがmainでもよさげです。。。
まぁ、mainだとしてもTCHAR* argv[]がarray<String^>^に変換されているので、
何か中間にあるとは思います。
オプションでエントリポイントを変更することは可能ですので、
プロパティより
[構成プロパティ]-[全般]-[共通言語ランタイムサポート]
を
共通言語ランタイムサポート(/clr)
に
[構成プロパティ]-[リンカ]-[詳細]-[エントリポイント]
を
wWinMainCRTStartup
に変更し、main文のあるcppファイルに
#include <windows.h>
#include <tchar.h>
の行を追加し、
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
{
return main(System::Environment::GetCommandLineArgs());
}
と記述すれば、hInstanceをどこかに保管することはできるでしょう。
まぁ、前述どおり、アセンブリからとれるからまぁやらないでしょうけど。
No.3
- 回答日時:
>int main(array<System::String ^> ^args)
>ってなってます。なので分かりませんでした。
それは変ですね。main関数の引数にアーギュメントが文字列の配列で渡されて来る宣言は、コンソールアプリケーションの場合で、Windowsフォームアプリケーションの場合、WinMainがエントリポイントになる筈です。
なので「プロジェクトのタイプを間違って新規作成した」と思います。作成した実行ファイルは、Windowsアプリケーションではなく、コンソールアプリケーションになっている筈です。
>その前提でも関数以外で取得する方法はありますか?
自身のインスタンスハンドルの取得方法は
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?p …
の「2008/07/15(火) 15:33:42」のコメントが参考になります。
この他、処理系に依存しますが、あるC言語では、ランタイムライブラリがWinMain関数を呼び出す前に、グローバル変数「Application」のメンバ変数に色々な値をセットしてくれるので
Appilication->Instance
などのように、グローバル変数を参照するだけで済みます。
Windowsフォームアプリケーションのプロジェクトの作成は何度もやっているので少なくとも何かしない限り、下記の内容に間違いはないと思います。
また、少なくともつまり「何か」しない限り「何らか」のアクションは必要になるという事で・・・
環境が変わる事がもしあれば役に立つかもしれません。
ありがとうございます。
No.2
- 回答日時:
>アプリケーションインスタンスのハンドルを指定する部分には何を設定すればいいのでしょうか?
WinMainが書かれているソースを見てみよう。
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
第一引数に渡されて来ている「HINSTANCE hInstance」とは何でしょう?
GetHINSTANCE()関数で、自分自身のインスタンスハンドルを取得する手もあるが、わざわざ関数で取得する必要は無い。
それが出来れば質問するには至らなかったのでしょうが
MFC使うやつならあるという事を聞いた気がしますしかし
VC++2008のWindowsフォームアプリケーションはC++/CLIで
WinMain関数というものがありません。
int main(array<System::String ^> ^args)
ってなってます。なので分かりませんでした。
出来てしまったので絶対必要ではありませんが
その前提でも関数以外で取得する方法はありますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- その他(ブラウザ) microege上、マカフィーの警告が出る 1 2022/03/26 09:52
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- グループウェア Macでオープンオフィスが開きません 1 2023/01/14 14:22
- Evernote Evernoteの操作 1 2023/07/24 17:17
- Microsoft ASP Windows10エンタープライズ版をインストールしたらアプリが使えなくなった 3 2023/03/07 11:08
- Excel(エクセル) エクセルのフッタやヘッダーについて 3 2023/02/04 09:45
- Windows 8 「Windowsの設定画面で開発者モードをONにして下さい」Win8.1でインストールが中断 2 2022/09/10 01:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#「オブジェクト参照が必要で...
-
マルチスレッド間でデータ交換...
-
シングルトンパターン
-
「インスタンス」の意味をわか...
-
複数の変数を宣言する時、同時...
-
newしないインスタンス?実体化...
-
private static という変数の修飾
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
エクセルVBAで、条件に一致する...
-
「天声人語」をインターネット...
-
C#でほかのファイルにある自作...
-
ArrayListのgetメソッドが実行...
-
servletからjspへオブジェクト...
-
NTPサーバーへのアクセス
-
execute()
-
LISTBOXの内容が更新されま...
-
packageとimport の違いって?
-
javaで、、、
-
命名規約は連番でいいのか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
文字列を日付に変換でParseExce...
-
String a = "a"; と String b =...
-
「インスタンス」の意味をわか...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
SQLを連続発行する時の正しい(?...
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
他のファイルの変数参照
-
C#「オブジェクト参照が必要で...
-
エクセル(複数インスタンス)...
-
VB6.0で、DLLを動的に参照したい
おすすめ情報