aris-wiz の回答履歴

全480件中1~20件表示
  • DLLでメンバ関数をエクスポートする方法

    VC++2005でDLLを作成しています。 そこで、クラスのメンバ関数をエクスポートする必要が出てきました。 クラスのメンバ関数を __declspec(dllexport) を使用せず、 DEFファイルを使用してエクスポートするには、 どのようにしたらよろしいでしょうか。

  • DLLでメンバ関数をエクスポートする方法

    VC++2005でDLLを作成しています。 そこで、クラスのメンバ関数をエクスポートする必要が出てきました。 クラスのメンバ関数を __declspec(dllexport) を使用せず、 DEFファイルを使用してエクスポートするには、 どのようにしたらよろしいでしょうか。

  • WinSockでの通信プログラムがうまくいきません

    WinSockでの通信プログラムがうまくいきません。 使用言語はC++とDirectXです。 ローカルでの通信(ルータを介したパソコン同士)はうまくいくんですが、別の場所にあるPCとの通信ができません。 以下実際に使用している関数です。 関数はマルチスレッドで動かしています。 WSADATA mWsaData; SOCKET mSockYou,mSockI; struct sockaddr_in mAddr; struct sockaddr_in mServer; struct sockaddr_in mClient; void CNetwork::Init(){ int err = WSAStartup( MAKEWORD( 2, 0 ), &mWsaData ); if( err != 0 ){ ERROR_EXIT(); return; } //Socket初期化 mSockI = socket( AF_INET, SOCK_STREAM, 0 ); if( mSockI == INVALID_SOCKET ){ ERROR_EXIT(); return; } mPort = 0; memset( mName, 0, sizeof( mName ) ); } //Server側 void CNetwork::Accept(){ FILE* fp; fopen_s( &fp, "messageLog.txt", "w" ); mAddr.sin_family = AF_INET; mAddr.sin_port = htons( mPort ); mAddr.sin_addr.S_un.S_addr = INADDR_ANY; if( bind( mSockI, (struct sockaddr *)&mAddr, sizeof( mAddr ) ) ) fprintf_s( fp, "bind失敗\n" ); if( listen( mSockI, 10 ) != 0 ) fprintf_s( fp, "listen失敗\n" ); int len = sizeof( mClient ); SOCKET t = accept( mSockI, (struct sockaddr*)&mClient, &len ); if( t == INVALID_SOCKET ) fprintf_s( fp, "Accept失敗\n" ); mSockYou = t; fprintf_s( fp, "Accept終了\n" ); fclose( fp ); } void CNetwork::Connect(){ FILE* fp; fopen_s( &fp, "messageLog.txt", "a" ); fprintf_s( fp, "Connect開始\n" ); //ソケットの設定 mServer.sin_family = AF_INET; mServer.sin_port = htons( mPort ); mServer.sin_addr.S_un.S_addr = inet_addr( mName ); if (mServer.sin_addr.S_un.S_addr == 0xffffffff) { fprintf_s( fp, "hostbynameへ\n" ); struct hostent *host; host = gethostbyname( mName ); if ( host == NULL ) { return false; } mServer.sin_addr.S_un.S_addr = *(unsigned int *)host->h_addr_list[0]; } fprintf_s( fp, "Socketの設定完了\n" ); while( true ){ fprintf_s( fp, "connect()開始\n" ); if( connect( mSockI, (struct sockaddr *)&mServer, sizeof( mServer ) ) == 0 ){ fprintf_s( fp, "Connect完了\n" ); break; } else{ fprintf_s( fp, "Connect失敗\n" ); Sleep(100); } } fprintf_s( fp, "Connect終了\n" ); fclose(fp); } また、ログは下のように出ました。 //サーバ側 Accept失敗 //クライアント側 Connect開始 Socketの設定完了 connect()開始 Connect失敗 ご教授お願いします。

  • WinSockでの通信プログラムがうまくいきません

    WinSockでの通信プログラムがうまくいきません。 使用言語はC++とDirectXです。 ローカルでの通信(ルータを介したパソコン同士)はうまくいくんですが、別の場所にあるPCとの通信ができません。 以下実際に使用している関数です。 関数はマルチスレッドで動かしています。 WSADATA mWsaData; SOCKET mSockYou,mSockI; struct sockaddr_in mAddr; struct sockaddr_in mServer; struct sockaddr_in mClient; void CNetwork::Init(){ int err = WSAStartup( MAKEWORD( 2, 0 ), &mWsaData ); if( err != 0 ){ ERROR_EXIT(); return; } //Socket初期化 mSockI = socket( AF_INET, SOCK_STREAM, 0 ); if( mSockI == INVALID_SOCKET ){ ERROR_EXIT(); return; } mPort = 0; memset( mName, 0, sizeof( mName ) ); } //Server側 void CNetwork::Accept(){ FILE* fp; fopen_s( &fp, "messageLog.txt", "w" ); mAddr.sin_family = AF_INET; mAddr.sin_port = htons( mPort ); mAddr.sin_addr.S_un.S_addr = INADDR_ANY; if( bind( mSockI, (struct sockaddr *)&mAddr, sizeof( mAddr ) ) ) fprintf_s( fp, "bind失敗\n" ); if( listen( mSockI, 10 ) != 0 ) fprintf_s( fp, "listen失敗\n" ); int len = sizeof( mClient ); SOCKET t = accept( mSockI, (struct sockaddr*)&mClient, &len ); if( t == INVALID_SOCKET ) fprintf_s( fp, "Accept失敗\n" ); mSockYou = t; fprintf_s( fp, "Accept終了\n" ); fclose( fp ); } void CNetwork::Connect(){ FILE* fp; fopen_s( &fp, "messageLog.txt", "a" ); fprintf_s( fp, "Connect開始\n" ); //ソケットの設定 mServer.sin_family = AF_INET; mServer.sin_port = htons( mPort ); mServer.sin_addr.S_un.S_addr = inet_addr( mName ); if (mServer.sin_addr.S_un.S_addr == 0xffffffff) { fprintf_s( fp, "hostbynameへ\n" ); struct hostent *host; host = gethostbyname( mName ); if ( host == NULL ) { return false; } mServer.sin_addr.S_un.S_addr = *(unsigned int *)host->h_addr_list[0]; } fprintf_s( fp, "Socketの設定完了\n" ); while( true ){ fprintf_s( fp, "connect()開始\n" ); if( connect( mSockI, (struct sockaddr *)&mServer, sizeof( mServer ) ) == 0 ){ fprintf_s( fp, "Connect完了\n" ); break; } else{ fprintf_s( fp, "Connect失敗\n" ); Sleep(100); } } fprintf_s( fp, "Connect終了\n" ); fclose(fp); } また、ログは下のように出ました。 //サーバ側 Accept失敗 //クライアント側 Connect開始 Socketの設定完了 connect()開始 Connect失敗 ご教授お願いします。

  • WinSockでの通信プログラムがうまくいきません

    WinSockでの通信プログラムがうまくいきません。 使用言語はC++とDirectXです。 ローカルでの通信(ルータを介したパソコン同士)はうまくいくんですが、別の場所にあるPCとの通信ができません。 以下実際に使用している関数です。 関数はマルチスレッドで動かしています。 WSADATA mWsaData; SOCKET mSockYou,mSockI; struct sockaddr_in mAddr; struct sockaddr_in mServer; struct sockaddr_in mClient; void CNetwork::Init(){ int err = WSAStartup( MAKEWORD( 2, 0 ), &mWsaData ); if( err != 0 ){ ERROR_EXIT(); return; } //Socket初期化 mSockI = socket( AF_INET, SOCK_STREAM, 0 ); if( mSockI == INVALID_SOCKET ){ ERROR_EXIT(); return; } mPort = 0; memset( mName, 0, sizeof( mName ) ); } //Server側 void CNetwork::Accept(){ FILE* fp; fopen_s( &fp, "messageLog.txt", "w" ); mAddr.sin_family = AF_INET; mAddr.sin_port = htons( mPort ); mAddr.sin_addr.S_un.S_addr = INADDR_ANY; if( bind( mSockI, (struct sockaddr *)&mAddr, sizeof( mAddr ) ) ) fprintf_s( fp, "bind失敗\n" ); if( listen( mSockI, 10 ) != 0 ) fprintf_s( fp, "listen失敗\n" ); int len = sizeof( mClient ); SOCKET t = accept( mSockI, (struct sockaddr*)&mClient, &len ); if( t == INVALID_SOCKET ) fprintf_s( fp, "Accept失敗\n" ); mSockYou = t; fprintf_s( fp, "Accept終了\n" ); fclose( fp ); } void CNetwork::Connect(){ FILE* fp; fopen_s( &fp, "messageLog.txt", "a" ); fprintf_s( fp, "Connect開始\n" ); //ソケットの設定 mServer.sin_family = AF_INET; mServer.sin_port = htons( mPort ); mServer.sin_addr.S_un.S_addr = inet_addr( mName ); if (mServer.sin_addr.S_un.S_addr == 0xffffffff) { fprintf_s( fp, "hostbynameへ\n" ); struct hostent *host; host = gethostbyname( mName ); if ( host == NULL ) { return false; } mServer.sin_addr.S_un.S_addr = *(unsigned int *)host->h_addr_list[0]; } fprintf_s( fp, "Socketの設定完了\n" ); while( true ){ fprintf_s( fp, "connect()開始\n" ); if( connect( mSockI, (struct sockaddr *)&mServer, sizeof( mServer ) ) == 0 ){ fprintf_s( fp, "Connect完了\n" ); break; } else{ fprintf_s( fp, "Connect失敗\n" ); Sleep(100); } } fprintf_s( fp, "Connect終了\n" ); fclose(fp); } また、ログは下のように出ました。 //サーバ側 Accept失敗 //クライアント側 Connect開始 Socketの設定完了 connect()開始 Connect失敗 ご教授お願いします。

  • Visual C++ の要求スペック

    Visual C++ 2010 Expressをインストールしようと考えています。 私のパソコンは PC名   SONY VAIO PCG-FX55Z/BP OS    Windows XP Home SP3 CPU   モバイルAMD Duron 1.1GHz RAM   256MB 空きHDD  7GB です。 このリソースでVisual C++ 2010 Expressをインストールしても大丈夫でしょうか? 恐らくひどく重くなると思うのですが。

  • 処理負荷特定で考えられる要因について

    元々他の人が作成したコードなのですが     元はXPで使用 その時はそういった現象が出ていないようにも思えますが     頻度の問題で気が付かなかったのかもしれません     (現在も動いていますが特に問題が出ているということを聞いていません) 現在 Win7上のVC6(SP6)にて ini ファイルへの書き込み処理を行っている関数Aがあり それを関数Bからコールしています 関数の関係は下に書いたようなイメージになります その他複数スレッドなども存在し各種動作を行っています 問題なのは不定期に(頻度も少ない様ですが)関数Aの処理時間が 30秒以上かかることがあるようなのです(ファイルCのチェックにて確認) もちろん通常は0~1秒程度しかかかっていません なぜそのような現象が発生するのか要因がつかめずに悩んでいます    (しかも30秒っていくらなんでもかかりすぎだろう   と) 考えられる可能性がありましたら何でもいいので教えていただけないでしょうか    少しでも情報が欲しいので可能性・想像だけでも構いません    (あまりにも現実離れした想像は困りますが) 関数B {     ファイルCに処理開始時間保存 (普通のファイル書き込み処理 追加モード)     関数A     ファイルCに処理終了時間保存 (普通のファイル書き込み処理 追加モード) } 関数A {    特定 INI ファイルへの書き込み  使っているのは APIや標準関数のみ    sprintf ・ WritePrivateProfileString   関数    セクション・キー名など変えて 50回前後実行します(1つの ini ファイルです) } ウイルスバスターが動いている環境で 上記に類似したコードを動かしたときに 異常に処理負荷がかかったということは経験しています (多分ファイルオープンクローズを繰り返しているためかなと想像しています)    ただしこの時は時々とかいう問題では無いためすぐにわかりました (上記現象は分かっているため)該当PC上ではウイルススキャンの類のソフトは インストールしていません 閉塞LAN構築下に存在しているPCとなります TCP/IP 通信 共有も行っているのでファイヤーフォールは無効にしています あまり関係ないと思いますが DI/Oボード増設を行っています その他については特殊な設定は行っていないと思っていただいて構わないと思います (既に十分特殊という話もあるかもしれません) 一つのファイルへのオープンクローズを一気に50回前後繰り返すという 作りもいまいちなのですが 既に駆動しているプログラム・ ini ファイルの操作の手軽さということでそのような作りになってしまっています 簡単に他の形に置き換えられるのであればそれでもかまわないのですが INIファイルの特定セクションや特定キーの一部データの更新という処置の為 自前でやるのにも現在躊躇している状態です   -> こうすれば簡単に置き換えが可能だって話があればそういった情報でも構いません           全ファイル読み込んだうえでセクションやキーをチェック該当部分を           置き換え(バッファ操作)して最後に一括で書き込めばいい           といったことは分かっています           (それを自前でやってないのがini ファイルの操作の手軽で~~ということです)              悩んでる間に作っちまえ という話もあるもかもしれませんが              (微妙な諸事情もあるので)あえてそこには触れないでください 他に必要な情報があれば必要に応じて追記させていただきます

    • koi1234
    • 回答数5
  • DirectXプログラムでCNTL+ALT+DEL

    C言語とDirectXを用いてプログラムを作成しているものです。 プログラムを実行している最中にCNTL+ALT+DELを押下し、キャンセルで元に戻ったとき、ウインドウに表示されていたものがすべて表示されなくなってしまいます。 WIN32APIを用いていたときは同じことをしても問題なく動作していました。 DirectXの場合は何か特別なことをしないといけないのでしょうか?(たとえばテクスチャをロードしなおすとか) よろしくお願い申し上げます。 OSはWindowsXPSP3、DirectXはNovember2008を使用しています

  • 識別子が見つかりません

    int median_value(unsigned char data3[9]) { int i, j, buf; for (j = 0; j < 8; j++) { for (i = 0; i < 8; i++) { if (data3[i+1] < data3[i]) { buf = data3[i+1]; data3[i+1] = data3[i]; data3[i] = buf; } } } return data3[4]; } この関数を他の関数内で data_B[i][j] = median_value(data3); といった形で呼び出そうとすると「識別子が見つかりません」とエラー表示が出てしまいます。何が違うのでしょうか?教えてください。なお、ほかのソース(void型)は長いので省きました。

    • aida13
    • 回答数3
  • プロジェクトのVC6からVC9の移行時のエラー

    現在、VC6で作成したプロジェクトをVC9に移行しています。 そこで、Debug版でコンパイルするとリンク時に下記エラーがでます。 //下記が、エラー内容 1>LINK : fatal error LNK1104: ファイル 'mfc42d.lib' を開くことができません。 Release版でコンパイルすると発生しません。 他の質問で同じような内容がありましたが、その対策内容を実行しようとするも、よく解りませんでした。 //////////////下記が参考にした解決策等////////////////////////////////// 今試しにVC6で・MFCアプリ(DLL共有) ・SDIアプリ・そのほかはデフォルトという条件で作って、VC2005 Proに変換してみたところ、問題なくコンパイル/リンクまでできました。もしかしてプロジェクトの中(ソリューションのツリーの中)に明示的にmfc42d.libを登録しているということはありませんか?vcのプロジェクトは"プロジェクト名.vcproj"で、単なるテキストファイルなので、その中もよく見てください。 /////////////////////////////////////////////////// 他に解決策はありますか?

  • プロジェクトのVC6からVC9の移行時のエラー

    現在、VC6で作成したプロジェクトをVC9に移行しています。 そこで、Debug版でコンパイルするとリンク時に下記エラーがでます。 //下記が、エラー内容 1>LINK : fatal error LNK1104: ファイル 'mfc42d.lib' を開くことができません。 Release版でコンパイルすると発生しません。 他の質問で同じような内容がありましたが、その対策内容を実行しようとするも、よく解りませんでした。 //////////////下記が参考にした解決策等////////////////////////////////// 今試しにVC6で・MFCアプリ(DLL共有) ・SDIアプリ・そのほかはデフォルトという条件で作って、VC2005 Proに変換してみたところ、問題なくコンパイル/リンクまでできました。もしかしてプロジェクトの中(ソリューションのツリーの中)に明示的にmfc42d.libを登録しているということはありませんか?vcのプロジェクトは"プロジェクト名.vcproj"で、単なるテキストファイルなので、その中もよく見てください。 /////////////////////////////////////////////////// 他に解決策はありますか?

  • WaitForSingleObjectについて

    いま、VC++2005MFCでCOMを使用したソフトを作成しています。 応答を待って次のコマンドというようなやりとりが相手側機器と必要なのですが、 COMの受信スレッドからのイベントをWaitForSingleObjectで待って次のコマンド送信 というようにやっていくとエディットボックスへのログ表示がコマンドのやり取りが一通り 終わるまで待たされてしまいます。 なにかいい方法はないでしょうか?

  • C言語でヘッダファイルにグローバル変数を宣言する

    main.hに static int a; と記述し、main.cで #include "main.h" [省略] a=10; のように使用して、-Wallをつけてコンパイルすると、main.cで使用しているにも関わらず、 'a' defined but not used という警告が表示されます。 同様に、関数においても、ヘッダファイルでstaticをつけると ‘~’ declared ‘static’ but never defined と警告されます。 静的グローバル変数などは、ソースファイル内で宣言しなければいけないのでしょうか?ヘッダファイル内で宣言しても警告が出ないような方法はありますか?

  • 「ファイルが無い」というエラー

    C#で、開発環境はおそらくVisualStudio2008、OSは7です。 数百万回程度ファイルを作成、書き込み、読み込み、消去を繰り返すと、 最初は問題ないのですが、 そのうち「ファイルがありません」という内容のエラーが出ます。 フォルダを見ると確かにありません。 file.existsメソッドを入れて ファイルが存在しない場合にはその処理をしないようにしても、 何事もなく通過するにもかかわらず、やはりエラーになります。 CPU処理速度がハードディスク書き込み速度を上回っているからかと思い、 Console.writeで無駄な出力を行い、処理を遅くしてみましたが、 状況は変わらないようです。 どのように対処したらよいでしょうか? なお、「数百万回程度ファイルを作成、書き込み、読み込み、消去を繰り返」さず、 関数間で直接データをやりとりすることもおそらく可能ですが、 今後のことを考え、とりあえずそういう実装になっています。

    • ibm_111
    • 回答数8
  • vs2010 VC++ Open 記述方法

    VS2010のVC++でバイナリデータをOpenしたいのですが、まったくコンパイルが通りません。 ヘルプで見ながら同じように作っているつもりですが、出来ませんでした。 エラーは・・・CFile::Openのインスタンスが引数リストと一致しませんと出てしまいます。 記述はこんな感じです! #include <afx.h> CFile fr; CFileException e; char* pFileName = "Kaltr.bat"; if(!fr.Open( pFileName, CFile::modeRead | CFile::typeBinary, &e)){   -/-/-/ 処理 -/-/-/ } 参考になるサイトがあったら教えて下さい。 よろしくお願いします。

  • vs2010 VC++ Open 記述方法

    VS2010のVC++でバイナリデータをOpenしたいのですが、まったくコンパイルが通りません。 ヘルプで見ながら同じように作っているつもりですが、出来ませんでした。 エラーは・・・CFile::Openのインスタンスが引数リストと一致しませんと出てしまいます。 記述はこんな感じです! #include <afx.h> CFile fr; CFileException e; char* pFileName = "Kaltr.bat"; if(!fr.Open( pFileName, CFile::modeRead | CFile::typeBinary, &e)){   -/-/-/ 処理 -/-/-/ } 参考になるサイトがあったら教えて下さい。 よろしくお願いします。

  • VC++2008EE 2種のコンソールの違い

    VisualC++入門書で学習中の者です。(VisualC++2008EE使用) Win32コンソールとCLRコンソールの2種類があり、本ではWin32コンソールのみ使用して解説してます。 構成プロパティ/全般/プロジェクトの規定値では、共通言語ランタイムサポート(/clr)になっています。これでC++/CLIに対応するいうことです。 では、この場合のWin32コンソールとCLRコンソールとで違いって何でしょうか。 標準C++の記述とC++/CLIの記述が混在したときにコンパイルでエラーになる場合があるとか、実行速度に違いが出るとかの差が生じるものでしょうか。 よろしくお願いします。

    • noname#157344
    • 回答数1
  • C言語について

    C言語初心者です。 今、プログラミングをしていてわからない箇所があるので質問させていただきます。 自作の関数へ配列を送る際、多重配列の途中の配列の値を関数に送りたい場合どのようにすれば よいのでしょうか? 文ではわかりづらいと思うので、例を書きます。↓ /* 関数 */ int sum(int data[],int N){ int i,temp=0; for(i=0;i<N;i++){ temp=temp+data[i]; } return(temp); } /* 本文 */ int output; int a[10][20][30]={適当な数字が入ってるとします。} // この時、配列の左と右に値を指定して、真ん中の配列を関数に送りたいです。 output=sum(???,20); //ちなみに現在はもう一つ1次元配列を作り、そこに一旦コピーしてから関数に送っています。 //なにか良い方法があればご教授ください。

  • C言語について

    C言語初心者です。 今、プログラミングをしていてわからない箇所があるので質問させていただきます。 自作の関数へ配列を送る際、多重配列の途中の配列の値を関数に送りたい場合どのようにすれば よいのでしょうか? 文ではわかりづらいと思うので、例を書きます。↓ /* 関数 */ int sum(int data[],int N){ int i,temp=0; for(i=0;i<N;i++){ temp=temp+data[i]; } return(temp); } /* 本文 */ int output; int a[10][20][30]={適当な数字が入ってるとします。} // この時、配列の左と右に値を指定して、真ん中の配列を関数に送りたいです。 output=sum(???,20); //ちなみに現在はもう一つ1次元配列を作り、そこに一旦コピーしてから関数に送っています。 //なにか良い方法があればご教授ください。

  • セキュリティに危害を与える試みが検出されました!

    Windows 7 Professional のクライアントから、Windows Server 2003 のファイルサーバー を利用しています。(Active Directoryの環境です) クライアントの電源を切らずに、翌朝作業を継続しようとすると、ファイルサーバーが 応答しないことが多々あります。 そのときに、ファイルサーバーに新たに接続しようとすると、 「セキュリティに危害を与える試みが検出されました。認証したサーバーに連絡してください。」 というメッセージが出て、新たにドメインユーザ名とパスワードを要求されます。 そこで入力すると、うまくいく場合と、絶対にうまくいかない場合とあります。 ネットで検索しても、XPクライアントで同様のエラーメッセージが常時でるというのはヒットしますが Windows 7クライアントでのこのような事例がヒットしません。 ちなみに、当社内では、XPクライアントで同様のエラーは皆無です。 ぜひアドバイスをお願い申し上げます。