<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Brauche Hilfe bei Änderung einer Befehlszeile]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bräuchte Hilfe bei einem Startprogramm.</p>
<p>Problemstellung:<br />
Ich arbeite mit einem Programm namens Dampsoft. Dieses ist ein Praxisverwaltungsprogramm. Zum Erstellen von Röntgenbildern wird ein externes Programm benötigt. Dieses heißt CDR Dicom. Der Aufruf des Röntgenprogramms erfolgt über das Verwaltungsprogramm und übergibt über einen Startparameter die folgenden drei Infos, Patientenname, Patientenvorname und Patientennummer, so daß das Röntgenprogramm nach dem Start automatisch den richtigen Patienten anzeigt. Da das Röntgenprogramm leider keinen Kommandozeilenaufruf versteht, hat die Herstellerfirma ein sog. Bridging-Programm beigelegt, incl. Quellcode und aller benötigten Dateien, damit es individuell angepaßt werden kann. Das Bridging-Programm heißt CDRStart.exe und in seiner jetztigen Form hat es folgende Syntax beim Aufruf:</p>
<p>CDRStart /LastName Smith /FirstName John /IDNumber 12345,</p>
<p>wobei Smith, John und 12345 sich halt jeweils entsprechend des Patienten ändert.</p>
<p>nun kommt leider unser Praxisprogramm mit diesem Aufruf nicht zurecht, da der Aufruf der immer gleichen Bezeichnung LastName, FirstName und IDNumber Probleme bereitet.</p>
<p>Ideal wäre eine Befehlszeile wie folgt:</p>
<p>CDRStart /Smith /John /12345</p>
<p>damit wäre es möglich, direkt aus dem Verwaltungsprogramm das Röntgenprogramm zu starten und direkt den Patienten angezeigt zu bekommen.</p>
<p>Der Quellcode der Datei CDRStart.exe listet sich in der Datei CDRStart.cpp wie folgt:</p>
<p>///////////////////////////////////////////////////////////////////////////////////////////////<br />
// CDRStart.cpp<br />
// Program to launch CDR and open patient exams with supplied parameters<br />
///////////////////////////////////////////////////////////////////////////////////////////////</p>
<p>#include &quot;stdafx.h&quot;<br />
#include &lt;string&gt;<br />
#import &quot;CDR.tlb&quot; no_namespace named_guids<br />
#import &quot;CDRData.tlb&quot; named_guids</p>
<p>using namespace std;</p>
<p>// Our parameters<br />
const TCHAR PARAM_LAST_NAME[] = _T(&quot;/Lastname&quot;);<br />
const TCHAR PARAM_FIRST_NAME[] = _T(&quot;/Firstname&quot;);<br />
const TCHAR PARAM_ID_NUMBER[] = _T(&quot;/IDNumber&quot;);</p>
<p>TCHAR *GetParam(LPCTSTR lpCmdLine, LPCTSTR lpParam);</p>
<p>// Main entry point for our application<br />
int APIENTRY _tWinMain(HINSTANCE hInstance,<br />
HINSTANCE hPrevInstance,<br />
LPTSTR lpCmdLine,<br />
int nCmdShow)<br />
{</p>
<p>// Initialize COM<br />
::CoInitialize(NULL);</p>
<p>try<br />
{<br />
// Get out patient info<br />
string s1(lpCmdLine); // make a local copy of the command line<br />
string s2(lpCmdLine); // for processing each parameter<br />
string s3(lpCmdLine);<br />
TCHAR *strLastName = GetParam(s1.c_str(),PARAM_LAST_NAME);<br />
TCHAR *strFirstName = GetParam(s2.c_str(),PARAM_FIRST_NAME);<br />
TCHAR *strIDNumber = GetParam(s3.c_str(),PARAM_ID_NUMBER);<br />
DATE examDate = 0.0;</p>
<p>// Declare automation smart pointers<br />
ICDRApplicationPtr pApp;<br />
IExamDocumentPtr pExam;</p>
<p>// Create instance of the application<br />
HRESULT hr = pApp.CreateInstance(CLSID_Application);<br />
if (FAILED(hr))<br />
throw 1;</p>
<p>// Create a new exam document<br />
pExam = pApp-&gt;CreateExamDocument();</p>
<p>// Try to load the patient info<br />
if (!pExam-&gt;LoadPatient(strLastName, strFirstName, strIDNumber))<br />
{<br />
// patient not found, let's show the new exam dialog<br />
// but make sure to populate our Patient Info<br />
CDRDATALib::ICDRPatientPtr pPatient = pExam-&gt;GetPatient();<br />
if (pPatient != NULL)<br />
{<br />
pPatient-&gt;PutLastName(strLastName);<br />
pPatient-&gt;PutFirstName(strFirstName);<br />
pPatient-&gt;PutIDNumber(strIDNumber);<br />
pExam-&gt;NewExam(FALSE);<br />
}<br />
}</p>
<p>pExam-&gt;PutVisible(TRUE); // make it visible<br />
pApp-&gt;SetUserCtrl(); // turn over control of the GUI to the user</p>
<p>// Set to foreground<br />
HWND hWnd = (HWND)pExam-&gt;GethWnd();<br />
if (hWnd)<br />
SetForegroundWindow(hWnd);</p>
<p>}<br />
catch(_com_error com_err)<br />
{<br />
MessageBox(NULL, com_err.ErrorMessage(), &quot;COM Error&quot;, MB_OK | MB_ICONERROR);<br />
}<br />
catch(...)<br />
{<br />
}</p>
<p>// Uninitialize COM and exit<br />
::CoUninitialize();<br />
return 0;<br />
}</p>
<p>// Scans the command line for a given parameter and returns the whitespace<br />
// delimited string immediately following it<br />
TCHAR *GetParam(LPCTSTR lpCmdLine, LPCTSTR lpParam)<br />
{<br />
TCHAR *pResult = NULL;<br />
if (!lpCmdLine || !lpParam)<br />
return NULL;</p>
<p>TCHAR seps[] = &quot; \t&quot;;</p>
<p>// Look for our param<br />
TCHAR *pFind = _tcsstr(lpCmdLine, lpParam);<br />
if (pFind)<br />
{<br />
// Skip over the parameter itself<br />
pFind += _tcslen(lpParam);</p>
<p>// Now skip over the whitespaces<br />
TCHAR *token = _tcstok(pFind, seps);<br />
while (token &amp;&amp; token[0] == NULL)<br />
{<br />
_tcstok(NULL, seps);// next whitespace<br />
}</p>
<p>if (token[0] != _T('/') &amp;&amp; token[0] != _T('-'))<br />
pResult = token;<br />
}</p>
<p>return pResult;<br />
}</p>
<p>Meine Frage an einen Programmierer: Ist es anhand des Quellcodes möglich, den Aufruf wie benötigt zu programmieren? Wie aufwendig ist das, bzw. wieviel Zeit/Geld kostet das? Danke im voraus für rasche Antwort</p>
<p>Henck</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171945/brauche-hilfe-bei-änderung-einer-befehlszeile</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 21:08:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171945.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Jan 2007 21:02:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche Hilfe bei Änderung einer Befehlszeile on Tue, 30 Jan 2007 21:02:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bräuchte Hilfe bei einem Startprogramm.</p>
<p>Problemstellung:<br />
Ich arbeite mit einem Programm namens Dampsoft. Dieses ist ein Praxisverwaltungsprogramm. Zum Erstellen von Röntgenbildern wird ein externes Programm benötigt. Dieses heißt CDR Dicom. Der Aufruf des Röntgenprogramms erfolgt über das Verwaltungsprogramm und übergibt über einen Startparameter die folgenden drei Infos, Patientenname, Patientenvorname und Patientennummer, so daß das Röntgenprogramm nach dem Start automatisch den richtigen Patienten anzeigt. Da das Röntgenprogramm leider keinen Kommandozeilenaufruf versteht, hat die Herstellerfirma ein sog. Bridging-Programm beigelegt, incl. Quellcode und aller benötigten Dateien, damit es individuell angepaßt werden kann. Das Bridging-Programm heißt CDRStart.exe und in seiner jetztigen Form hat es folgende Syntax beim Aufruf:</p>
<p>CDRStart /LastName Smith /FirstName John /IDNumber 12345,</p>
<p>wobei Smith, John und 12345 sich halt jeweils entsprechend des Patienten ändert.</p>
<p>nun kommt leider unser Praxisprogramm mit diesem Aufruf nicht zurecht, da der Aufruf der immer gleichen Bezeichnung LastName, FirstName und IDNumber Probleme bereitet.</p>
<p>Ideal wäre eine Befehlszeile wie folgt:</p>
<p>CDRStart /Smith /John /12345</p>
<p>damit wäre es möglich, direkt aus dem Verwaltungsprogramm das Röntgenprogramm zu starten und direkt den Patienten angezeigt zu bekommen.</p>
<p>Der Quellcode der Datei CDRStart.exe listet sich in der Datei CDRStart.cpp wie folgt:</p>
<p>///////////////////////////////////////////////////////////////////////////////////////////////<br />
// CDRStart.cpp<br />
// Program to launch CDR and open patient exams with supplied parameters<br />
///////////////////////////////////////////////////////////////////////////////////////////////</p>
<p>#include &quot;stdafx.h&quot;<br />
#include &lt;string&gt;<br />
#import &quot;CDR.tlb&quot; no_namespace named_guids<br />
#import &quot;CDRData.tlb&quot; named_guids</p>
<p>using namespace std;</p>
<p>// Our parameters<br />
const TCHAR PARAM_LAST_NAME[] = _T(&quot;/Lastname&quot;);<br />
const TCHAR PARAM_FIRST_NAME[] = _T(&quot;/Firstname&quot;);<br />
const TCHAR PARAM_ID_NUMBER[] = _T(&quot;/IDNumber&quot;);</p>
<p>TCHAR *GetParam(LPCTSTR lpCmdLine, LPCTSTR lpParam);</p>
<p>// Main entry point for our application<br />
int APIENTRY _tWinMain(HINSTANCE hInstance,<br />
HINSTANCE hPrevInstance,<br />
LPTSTR lpCmdLine,<br />
int nCmdShow)<br />
{</p>
<p>// Initialize COM<br />
::CoInitialize(NULL);</p>
<p>try<br />
{<br />
// Get out patient info<br />
string s1(lpCmdLine); // make a local copy of the command line<br />
string s2(lpCmdLine); // for processing each parameter<br />
string s3(lpCmdLine);<br />
TCHAR *strLastName = GetParam(s1.c_str(),PARAM_LAST_NAME);<br />
TCHAR *strFirstName = GetParam(s2.c_str(),PARAM_FIRST_NAME);<br />
TCHAR *strIDNumber = GetParam(s3.c_str(),PARAM_ID_NUMBER);<br />
DATE examDate = 0.0;</p>
<p>// Declare automation smart pointers<br />
ICDRApplicationPtr pApp;<br />
IExamDocumentPtr pExam;</p>
<p>// Create instance of the application<br />
HRESULT hr = pApp.CreateInstance(CLSID_Application);<br />
if (FAILED(hr))<br />
throw 1;</p>
<p>// Create a new exam document<br />
pExam = pApp-&gt;CreateExamDocument();</p>
<p>// Try to load the patient info<br />
if (!pExam-&gt;LoadPatient(strLastName, strFirstName, strIDNumber))<br />
{<br />
// patient not found, let's show the new exam dialog<br />
// but make sure to populate our Patient Info<br />
CDRDATALib::ICDRPatientPtr pPatient = pExam-&gt;GetPatient();<br />
if (pPatient != NULL)<br />
{<br />
pPatient-&gt;PutLastName(strLastName);<br />
pPatient-&gt;PutFirstName(strFirstName);<br />
pPatient-&gt;PutIDNumber(strIDNumber);<br />
pExam-&gt;NewExam(FALSE);<br />
}<br />
}</p>
<p>pExam-&gt;PutVisible(TRUE); // make it visible<br />
pApp-&gt;SetUserCtrl(); // turn over control of the GUI to the user</p>
<p>// Set to foreground<br />
HWND hWnd = (HWND)pExam-&gt;GethWnd();<br />
if (hWnd)<br />
SetForegroundWindow(hWnd);</p>
<p>}<br />
catch(_com_error com_err)<br />
{<br />
MessageBox(NULL, com_err.ErrorMessage(), &quot;COM Error&quot;, MB_OK | MB_ICONERROR);<br />
}<br />
catch(...)<br />
{<br />
}</p>
<p>// Uninitialize COM and exit<br />
::CoUninitialize();<br />
return 0;<br />
}</p>
<p>// Scans the command line for a given parameter and returns the whitespace<br />
// delimited string immediately following it<br />
TCHAR *GetParam(LPCTSTR lpCmdLine, LPCTSTR lpParam)<br />
{<br />
TCHAR *pResult = NULL;<br />
if (!lpCmdLine || !lpParam)<br />
return NULL;</p>
<p>TCHAR seps[] = &quot; \t&quot;;</p>
<p>// Look for our param<br />
TCHAR *pFind = _tcsstr(lpCmdLine, lpParam);<br />
if (pFind)<br />
{<br />
// Skip over the parameter itself<br />
pFind += _tcslen(lpParam);</p>
<p>// Now skip over the whitespaces<br />
TCHAR *token = _tcstok(pFind, seps);<br />
while (token &amp;&amp; token[0] == NULL)<br />
{<br />
_tcstok(NULL, seps);// next whitespace<br />
}</p>
<p>if (token[0] != _T('/') &amp;&amp; token[0] != _T('-'))<br />
pResult = token;<br />
}</p>
<p>return pResult;<br />
}</p>
<p>Meine Frage an einen Programmierer: Ist es anhand des Quellcodes möglich, den Aufruf wie benötigt zu programmieren? Wie aufwendig ist das, bzw. wieviel Zeit/Geld kostet das? Danke im voraus für rasche Antwort</p>
<p>Henck</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220192</guid><dc:creator><![CDATA[Henck]]></dc:creator><pubDate>Tue, 30 Jan 2007 21:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Änderung einer Befehlszeile on Tue, 30 Jan 2007 23:10:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Scans the command line for a given parameter and returns the whitespace 
// delimited string immediately following it 
TCHAR *GetParam(LPCTSTR lpCmdLine, LPCTSTR lpParam) 
{ 
TCHAR *pResult = NULL; 
if (!lpCmdLine || !lpParam) 
return NULL; 

TCHAR seps[] = &quot; \t&quot;; 

static int CallCount=0;

// Look for our param 
TCHAR *pFind = 0; 
for(int a=0;a&lt;CallCount &amp;&amp; (pFind=_tcsstr(lpCmdLine, lpParam));a++) 
{ 
// Skip over the parameter itself 
pFind += _tcslen(_T('/')); 

if (token[0] != _T('/') &amp;&amp; token[0] != _T('-')) 
pResult = token; 
lpCmdLine = pFind;
} 

CallCount++;

return pResult; 
}
</code></pre>
<p>falls du das wirklich immer nur einmal aufrufst, koennte dieser hack funzen, allerdings hab ich es nicht ausprobiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> (zu lazy), ersetze einfach die funktion durch meinen code.</p>
<p>falls du aber daten in einem anderen format einfuetterst als</p>
<pre><code>/Smith /John /12345
</code></pre>
<p>wird es explodieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> benutzung auf eigene gefahr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220246</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 30 Jan 2007 23:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Änderung einer Befehlszeile on Wed, 31 Jan 2007 20:55:37 GMT]]></title><description><![CDATA[<p>Hallo Rapso, ersteinmal vielen Dank für die rasche Hilfe.</p>
<p>Ich habe also die Änderungen in die cdrstart.cpp eingetragen und versucht, darus wieder eine exe zu machen. Ich habe mir dazu Microsoft Visual C++ von einem Bekannten ausgeliehen ;-). Dabei gab es jedoch jede Menge Fehlermeldungen. Ich habe dann mal versucht, aus der Original cdrstart.cpp, also ohne Deine Änderungen, eine exe zu machen. Dabei gibt es nur eine Fehlermeldung:</p>
<p>*Temporäre Dateien und Ausgabedateien für &quot;CDRStart - Win32 Debug&quot; werden gelöscht.<br />
--------------------Konfiguration: CDRStart - Win32 Debug--------------------<br />
Kompilierung läuft...<br />
CDRStart.cpp<br />
Linker-Vorgang läuft...<br />
LINK : fatal error LNK1104: Datei &quot;ob.lib&quot; kann nicht geoeffnet werden<br />
Fehler beim Ausführen von link.exe.</p>
<p>CDRStart.exe - 1 Fehler, 0 Warnung(en)*</p>
<p>Ich google mich immer von Fehler zur Fehlerbehebung, da ich echt kaum Ahnung von C++ habe. Ich kann aber weder auf meinem Rechner, noch im Netz, diese dusselige ob.lib finden, um sie im Linker einzutragen. Gibt es diese Datei oder worauf könnte die Fehlermeldung hinweisen?<br />
Danke im voraus</p>
<p>Henck</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220793</guid><dc:creator><![CDATA[Henck]]></dc:creator><pubDate>Wed, 31 Jan 2007 20:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Änderung einer Befehlszeile on Wed, 31 Jan 2007 21:24:32 GMT]]></title><description><![CDATA[<p>Ach ja, des besseren Supports wegen, hat der Hersteller des Programms CDRDicom, alle für das Verändern des Startprogramms nötigen Dateien mitgeliefert, als da wären:</p>
<p>CDR.tlb, CDRData.tlb, CDRStart.cpp, CDRStart.vcproj, stdafx.cpp und stdafx.h</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220810</guid><dc:creator><![CDATA[Henck]]></dc:creator><pubDate>Wed, 31 Jan 2007 21:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Änderung einer Befehlszeile on Wed, 31 Jan 2007 23:02:26 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=4180" rel="nofollow">Korbinian</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=11" rel="nofollow">Projekte</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC (Visual C++)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220861</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 31 Jan 2007 23:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche Hilfe bei Änderung einer Befehlszeile on Thu, 01 Feb 2007 07:44:26 GMT]]></title><description><![CDATA[<p>EIne Deiner Header-Dateien oder eines der verwendeten Objekt Dateien will die ob.lib haben. Du wirst nicht drum herum kommen, herauszufinden wer das ist.</p>
<p>Du kannst dazu die Linker Option /verbose verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220894</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 01 Feb 2007 07:44:26 GMT</pubDate></item></channel></rss>