• 締切済み

EXE間でデータを受け渡し時のkarnell32エラー

itohhの回答

  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 >API関数(OpenProcess,GetProcess,CloseHandle)を使って処理をしている この関数をどのように使用しているのでしょうか? そもそも、GetProcessなる関数は存在するのでしょうか? 使用しているソースコードを掲載していただければ、お手伝いできることもある かもしれません。 ただ、上記の関数では、exe間のデータの受け渡しは出来ないでしょう。 exe間のデータの受け渡し方法 1.マップドファイル(共有メモリ)を使用する方法。 2.一般ファイル(.datファイルなど)を使用する方法。 3.SendMessageでWM_COPYDATAメッセージで行う方法。 4.クリップボードAPIを使用する方法。 思いつくところでは、こんなところでしょうか? 詳細は、MSDNライブラリーを参照してください。

takashi944
質問者

補足

申し訳ありません。質問を間違えていました。 もう一度、書かせていただくと あるEXE(親)が別EXE(子)を起動させ、その間親EXEは裏で生きたままで、子EXEの終了を監視し、終了したら親EXEをShowしています。 しかし、子EXEが終了して親EXEに遷移するタイミングで「~EXEによりKernel32.dllに不正な処理が発生しました。問題が解決しなければ再起動してください。」というようなメッセージが出ることがあるのです。毎回出るわけではないし、リソースの不足も影響するようなのですが、はっきりした原因がつかめません。 使用しているAPI関数は ・OpenProcess ・GetExitCodeProcess ・CloseHandle の3つです。 以下は実際のソースです。 この方法はマイクロソフトのサポート技術情報にも出ていたんですが、VB4のサンプルとして書かれていたのが気になってます。 よろしくお願いします。 ------------------------------------------------------------- Public Function gfExecChildProcessAndWait(ByRef frmForm As Form, ByVal strExeFileName As String, _ ByVal blnFlgParentFormUnload As Boolean) As Boolean Dim lngProcessId As Long Dim lngProcessHandle As Long Dim lngWin32apiResultCode As Long Dim lngProcessExitCode As Long On Error GoTo SysErr_gfExecChildProcessAndWait: gfExecChildProcessAndWait = True lngProcessExitCode = 0 ' 実行可能ファイルを起動(コマンドライン引数付き) lngProcessId = Shell(strExeFileName, vbNormalFocus) ' プロセスオブジェクトのハンドルを取得 lngProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False, lngProcessId) ' 新しいプロセスを作成できた場合は If lngProcessHandle <> 0 Then '呼び出し元のフォームをアンロード(あるいはHide) If (blnFlgParentFormUnload = True) Then Unload frmForm Else frmForm.Hide End If ' ポーリング Do ' プロセスの終了状態を取得し、モジュールレベル変数に格納 lngWin32apiResultCode = GetExitCodeProcess(lngProcessHandle, lngProcessExitCode) ' オペレーティングシステムに制御を渡す DoEvents Loop While lngProcessExitCode = STILL_ACTIVE ' プロセスが終了していない間ループ Else Call gsLogWrite("gfExecChildProcessAndWait", "プロセスハンドルの取得に失敗しました。") gfExecChildProcessAndWait = False End If ' プロセスオブジェクトのハンドルをクローズ lngWin32apiResultCode = CloseHandle(lngProcessHandle) Exit Function SysErr_gfExecChildProcessAndWait: gfExecChildProcessAndWait = False Exit Function End Function -------------------------------------------------------------

関連するQ&A

  • karnell32エラー(訂正:EXE間でデータを受け渡し時の~)

     申し訳ありません。またお答えしていただいた方にはご迷惑をおかけしました。代理で書き込んでもらったので、質問の説明が足りませんでした。 もう一度、書かせていただきますと、  あるEXE(親)が別EXE(子)を起動させ、その間親EXEは裏で生きたままで、子EXEの終了を監視し、終了したら親EXEをShowしています。しかし、子EXEが終了して親EXEに遷移するタイミングで「~EXEによりKernel32.dllに不正な処理が発生しました。問題が解決しなければ再起動してください。」というようなメッセージが出ることがあるのです。毎回出るわけではないし、リソースの不足も影響するようなのですが、はっきりした原因がつかめません。 使用しているAPI関数は ・OpenProcess ・GetExitCodeProcess・CloseHandle の3つです。    次の質問の所に実際のソースを書いてみます。この方法はマイクロソフトのサポート技術情報にも出ていたんですが、VB4のサンプルとして書かれていたのが気になってます。よろしくお願いします。

  • VB4.EXE で 実行時エラー '31037'

    WIN2000 で VB4.EXE を 動かそうとすると 実行時エラー '31037' ファイルの読み込み中にエラーが発生しました。 とエラーが出ます。 どうやらグリッド部分の読み込みで エラーが出てるみたいです。 VB6.EXE を 設定した人間が 環境を変えたらしく 今までのように最低限のDLL,OCXで 動かなくなりました。 VB4.EXE と VB6.EXE を 共存させるには どうすればいいでしょうか?

  • fortran a.exe システムエラー

    プログラミング初心者です。  コンパイルした後、a.exeファイルはつくられるのですが、いざプログラムを実行しようとすると     ウィンドウタイトル:「a.exe -システムエラー-」   本文:コンピュータにlibgfortran-3.dll がないのでプログラムを実行できません。      プログラムを再インストールしてください。     のようなエラーが出ます。        どうすればいいのでしょうか?

  • EXEファイルを実行できません。

    VB6でプログラムをつくりました(OS:WINDOWS98)が、EXEファイルを他のPC(OS:WINDOWS2000/WINDOWS95等)で実行させるのですが、うまくうごきません。API関数を使用しているのでこのためかと思いますが、どのように対処したらよいかわかりません。 "SLEEP" "RegCloseKey/RegOpenKeyEx" "RegQueryValueExstr" "Keybd_event" を使用しています。 他のPCにはソフトの干渉からVBをインストールすることはできません。 DLLをシステムに入れることなら問題ないのですが、どなたか教えていただけませんか?

  • Debug.exe実行時にWinMainCRTStartup()でエラーが発生する

    WindowsXP VisualC++.net2003 で開発をしています。 VC上で実行すると問題なく実行できるのですが、Debugファイルから実行するとエラーが発生します。 エラーの発生場所は setSBUpLow() 行409+ 0x9となっています。 この関数はWinMainCRTStartup()で呼び出されています。この関数はAPIです。 Windowを初期化するときに自動的に呼ばれているようです。 自分のプログラムのどの部分でエラーが起こっているか調べたところ、クラスのコンストラクタ内で行っている次の処理が原因のようです。  int **test;  test= new int*[10];  for(int i = 0; i < 10; i++){   test[i] = new int[10];  } この部分をコメントアウトするとエラーが発生しなくなります。 new演算子でメモリを確保しているときにエラーが発生 しているようです。 なぜ、Debug.exeで実行したときだけ エラーがでるのでしょうか? また、エラーが発生しないようにするにはどうすればいいのでしょうか?

  • VB6.0を使用しています

    VB6.0を使用しています VC6.0でdefファイルで宣言してDLLを作成し VBのEXEよりDLLをCALLしています。 VBではDLLの関数をDeclareで宣言しています。 問題なのは ちょっと前まで問題なく動いたDLLですが 新規にDLL関数を追加したら EXEではちゃんと呼び出して処理を行なってくれておりますが VBのデバッグ起動で呼び出すと、その新規のDLLの関数がありませんと メッセージを通知して止まってしまいます、 EXEでは動くのにデバッグ起動ではだめなんでしょうか??不思議です もし、ご存知の方がいらっしゃいましたら教えてください。

  • VB6.0exeから.NETのDLLを呼び出した場合の実行時エラー’429’について

    お世話になります。 環境はWindowsXPです。 現在、VB6.0のexeから.NETのDLLを使用する・・・というのをしています。 以下の手順を踏み、実行してみたのですがどうも上手く行きません。。。 (1).NETのDLLを作成 (2)COMとして利用するために、.NET 2003コマンドプロンプトから「regasm」コマンドにてレジストリに登録 (3)tlbexpコマンドで、タイプライブラリを作成 (4)VB6のプロジェクトから(3)を参照設定する (5)VB6から.NETクラスを生成し、呼び出す (6)プロジェクトをコンパイルし、exeを生成 この手順にて実行すると「実行時エラー'429'ACtiveXコンポーネントはオブジェクトを作成できません」という エラーメッセージが出てしまいます。 windows updateをしてみたり、VB6.0のランタイムをインストールしてみたりしたのですが、 どうもダメみたいで困っています。 解決方法などご存知の方がいらっしゃいましたら、 ご教授いただけると大変助かります。 よろしくお願いいたします。

  • VB2005で作成したDLLの呼び出し方

    はじめまして、VB2005(.NET)初心者です。 現在、各プログラムを実行するためのメニュー プログラムを作成しています。 .net以前では、各プログラムをEXEで作成し API関数を利用し、メニューより実行させて いましたが、今回、各プログラムをEXEではなく dllで作成し実行する方法で作ることになりました。 各プログラムのdllを実行する方法がわかりません。 参考書等みてみましたが、見当たりません。 どのようにしていらっしゃるか教えて下さい。 宜しくお願いいたします。

  • WindowsXP で、スタートするとき、「issass.exe.シス

    WindowsXP で、スタートするとき、「issass.exe.システムリソースが不足するため、 APIを終了できません」というメッセージが出て、コンピュータを立ち上げることができません。 このメッセージボックスのOKをクリックすると、再起動しますが、ずっと同じことの繰り返しです。 セーフモードでも立ち上げることができません。有効な解決法をどなたか教えてください。

  • EXCEL、EXEエラーについて

    Excelでいっぱいファイルがあるのですが、その1つだけが、開こうとするとExcelが原因でEXCEL、EXEにエラーが発生しました。Excelは終了します。問題が解決しない場合はコンピュータを再起動してくださいとメッセージがでます。以前からメッセージがでるので、再インストールしたり、ファイルを削除して、再度作成し直したんですが、また同じようにエラーになります。ファイルの内容は、簡単な表に足し算等を入力したりする簡単なものです。どなたか解決方法を教えて下さい。御願いします。コンピュータはWin98MEでExcel2000です。