1

私は2つ持ってい.exeます。実行時に互いの関数を使用する必要があります。1 つは dilogue ベースのアプリケーション.exeで、もう 1 つはメイン アプリケーションです.exe。メイン アプリケーションは、ダイアログ ベースのアプリケーション機能を使用する必要があります。しかし、コンパイル中にcalled functiondialog based applications .lib. にダイアログベースのアプリケーションを作成すると.lib、プログラムは実行時に失敗するためです。.exeだから、私はお互いに電話をかける必要があります.exe。通話しようとすると、

  TestClass tc;/* Call dialog based application exe functions*/
   tc.MyTest();

次のようなエラーをスローしています

1>CallExe.obj : error LNK2001: unresolved external symbol "public: __thiscall TestClass::~TestClass(void)" (??1TestClass@@QAE@XZ)
1>CallExe.obj : error LNK2001: unresolved external symbol "public: void __thiscall TestClass::MyTest(void)" (?MyTest@TestClass@@QAEXXZ)
1>CallExe.obj : error LNK2001: unresolved external symbol "public: __thiscall TestClass::TestClass(void)" (??0TestClass@@QAE@XZ)

Main application.cpp

int _tmain(int argc, _TCHAR* argv[])
{
   STARTUPINFO si;     
   PROCESS_INFORMATION pi;
  TestClass tc;/* Call dialog based application exe functions*/
   tc.MyTest();

   // set the size of the structures
   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );
   LPCTSTR szCmdline = (LPCTSTR)(TEXT("Dialog.exe"));

  // start the program up
  if(!CreateProcess(TEXT("D:\\Rasmi's\\Personal\\Visual Studio\\Dialog\\Debug\\Dialog.exe"),   // the path
    argv[1],        // Command line

        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
        )
      {cout << "Unable to create\n";}
        // Close process and thread handles. 
        CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread );

        return 0;
    }

Dialog.exe

TestClass::TestClass(void)
{
}


TestClass::~TestClass(void)
{
}
void TestClass::MyTest()
{
    cout << "This is my Test Class \n";
}
4

4 に答える 4

2

他の人が言ったように、基本的な設計上の問題があります。2 つの実行可能ファイルが必要な理由は説明されていませんが、2 つの別個のアプリケーションが相互にやり取りする必要がある場合は、何らかの形式のプロセス間通信を使用する必要があります。

2 つのアプリケーションがダイアログ フォームを表示するために共通のコードを共有するだけでよく、相互に対話する必要がない場合は、DLL プロジェクトを作成して共有コードを含めることができます。両方のアプリケーションがこの DLL とリンクします。例については、 MFC 拡張 DLLを参照してください。

于 2013-10-15T11:57:34.393 に答える
1

うーん、あなたはそのようにすることはできません。プロシージャや関数の呼び出しなどのアプリとのやり取りが必要な場合は、xml-rpc などを使用する必要があります。

于 2013-10-15T10:03:54.603 に答える