[ idb @ 25.11.2003. 13:56 ] @
Potrebno mi je da iz Windows aplikacije, pozovem program Sodipodi koji bi trebao da ucita neki SVF fajl i da ga prikaze. Mogu to da uradim uz pomoc Internet Explorera, ali on ima problema kod stampanja.... Sodipodi je pisan uz pomoc Gtk+, pa ne znam kako da mu prosledim parametar (ovde bi to bilo ime fajle). Probao sam direktno iz komandne linije, medjutim Sodipodi izgleda uopste ne uzima u obzir argumente koji mu se proslede, jer sta god da mu stavis kao argument on samo otvori glavni widget i nista vise (cak ni gresku ne prijavi). Iz mog programa sam probao fje ShellExecute i CreateProcess, ali ni to ne pomaze. Ima li neki iskusni Gtk+ programer da mi ponudi neko resenje? Ako se neko pita zasto koristim bas Sodipodi, tri su glavna razloga: - editor vektorske grafike, pa korisnik moze doda i nesto svoje na vec gotov crtez - License: GNU General Public License (GPL), Public Domain (znaci moze se besplatno koristiti) Sledi deo koda test aplikacije, koja bi trebala da pozove Sodipodi i ucita fajlu MojaSVG.SVG. Code: //Dlg_Test.cpp #include <windows.h> #include "dlg_test.h" using namespace std; char SvgFile[256], SodipodiPath[256], ExtProg[256]; BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG: strcpy(SvgFile,"D:\\CppRadni\\DLG_Test\\MojaSVG.SVG"); strcpy(SodipodiPath,"C:\\Program Files\\Sodipodi\\bin\\"); strcpy(ExtProg,SodipodiPath); strcat(ExtProg,"Sodipodi.exe"); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BUTT1: { ShellExecute(hwnd, "open", "IEXPLORE.EXE", SvgFile,NULL,SW_SHOWNORMAL); // ovo radi kako treba } break; case IDC_BUTT2: { SetCurrentDirectory(SodipodiPath); // da bi se glavni Widget pravilno iscrtao ShellExecute(hwnd, NULL, ExtProg, NULL,NULL,SW_SHOWNORMAL); //ovo samo startuje Sodipodi, bez obzira sta mu stavim za cetvrti argument } break; case IDC_BUTT3: SetCurrentDirectory(SodipodiPath); // da bi se glavni Widget pravilno iscrtao { // ovo parce je modifikovani kod sa MSDN: // http://msdn.microsoft.com/libr...oc/base/creating_processes.asp STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess(ExtProg, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi )) MessageBox(hwnd, "NESTO SAM POGRESIO", "PORUKA", MB_OK); // Wait until child process exits. //WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); //ovo samo startuje Sodipodi, bez obzira sta mu stavim za drugi argument } break; } break; case WM_CLOSE: EndDialog(hwnd, 0); break; default: return false; } return true; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) { return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc); } Inace radim pod Windows2000 i sa Dev-Cpp 4.9.8.4 with Mingw/GCC 3.2 |