<?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[Arbeiten mit dem Adobe XMP SDK]]></title><description><![CDATA[<p>Hallo,<br />
ich arbeite an einem C++ Programm das mittels Adobe XMP SDK, Metadaten von einem Bild liest oder schreibt. Funktioniert soweit auch alles wunderbar auch weil es relativ ausführliche Docs zu dem Thema gibt.</p>
<p>Jetzt zu meinem Problem, compile ich den Code und lasse ihn laufen funktioniert alles. Drücke ich die compilierte Exe doppelt funktioniert ebenfalls alles. Wenn ich allerdings eine Bat erstelle die diese Exe aufruft bekomm ich die Nachricht:&quot;Unable to open bild.jpg&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich hänge hier mal den stark gekürzten Code an, der eigentlich nur versucht ein Bild zu öffnen:</p>
<pre><code class="language-cpp">//Provide the string class with wich to instantiate the template classes
#include &lt;string&gt;
#define TXMP_STRING_TYPE std::string

//Include the XMPFiles component of the XMP Toolkit
#define XMP_INCLUDE_XMPFILES 1

//Ensure that the XMP class templates are instantiated
#include &quot;XMP.incl_cpp&quot;

//Provide access to the XMP API
#include &quot;XMP.hpp&quot;

//Other includes
#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

int main (void) {

	string filename = &quot;bild.jpg&quot;;

	if(!SXMPMeta::Initialize())
	{
		cout &lt;&lt; &quot;Could not initialize toolkit!&quot;;
		return -1;
	}

	// Must initialize SXMPFiles before we use it
	if(SXMPFiles::Initialize())
	{
		try
		{
			// Options to open the file with - open for editing and use a smart handler
			XMP_OptionBits opts = kXMPFiles_OpenForUpdate | kXMPFiles_OpenUseSmartHandler;

			bool ok;
			SXMPFiles myFile;
			std::string status = &quot;&quot;;

			// First we try and open the file
			ok = myFile.OpenFile(filename, kXMP_UnknownFile, opts);

			// If the file is open then read get the XMP data
			if(ok)
			{
				cout &lt;&lt; status &lt;&lt; endl;
				cout &lt;&lt; filename &lt;&lt; &quot; is opened successfully&quot; &lt;&lt; endl;
				myFile.CloseFile();
			}
			else
			{
				cout &lt;&lt; &quot;Unable to open &quot; &lt;&lt; filename &lt;&lt; endl;
			}
		}
		catch(XMP_Error &amp; e)
		{
			cout &lt;&lt; &quot;ERROR: &quot; &lt;&lt; e.GetErrMsg() &lt;&lt; endl;
		}

		// Terminate the toolkit
		SXMPFiles::Terminate();
		SXMPMeta::Terminate();

	}
	else
	{
		cout &lt;&lt; &quot;Could not initialize SXMPFiles.&quot;;
		return -1;
	}
	cin.get();
	return 0;
}
</code></pre>
<p>und hier mal die Bat:</p>
<pre><code>C:\\Debug\\Xmp4mSystem.exe
PAUSE
</code></pre>
<p>Ich hoffe ja, dass mir bei der Batch - Datei einfach nur ein nötiger Parameter fehlt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vielen Dank für die Hilfe<br />
geneticZ</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236574/arbeiten-mit-dem-adobe-xmp-sdk</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 20:19:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236574.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Mar 2009 09:46:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Arbeiten mit dem Adobe XMP SDK on Tue, 17 Mar 2009 09:46:07 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich arbeite an einem C++ Programm das mittels Adobe XMP SDK, Metadaten von einem Bild liest oder schreibt. Funktioniert soweit auch alles wunderbar auch weil es relativ ausführliche Docs zu dem Thema gibt.</p>
<p>Jetzt zu meinem Problem, compile ich den Code und lasse ihn laufen funktioniert alles. Drücke ich die compilierte Exe doppelt funktioniert ebenfalls alles. Wenn ich allerdings eine Bat erstelle die diese Exe aufruft bekomm ich die Nachricht:&quot;Unable to open bild.jpg&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich hänge hier mal den stark gekürzten Code an, der eigentlich nur versucht ein Bild zu öffnen:</p>
<pre><code class="language-cpp">//Provide the string class with wich to instantiate the template classes
#include &lt;string&gt;
#define TXMP_STRING_TYPE std::string

//Include the XMPFiles component of the XMP Toolkit
#define XMP_INCLUDE_XMPFILES 1

//Ensure that the XMP class templates are instantiated
#include &quot;XMP.incl_cpp&quot;

//Provide access to the XMP API
#include &quot;XMP.hpp&quot;

//Other includes
#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

int main (void) {

	string filename = &quot;bild.jpg&quot;;

	if(!SXMPMeta::Initialize())
	{
		cout &lt;&lt; &quot;Could not initialize toolkit!&quot;;
		return -1;
	}

	// Must initialize SXMPFiles before we use it
	if(SXMPFiles::Initialize())
	{
		try
		{
			// Options to open the file with - open for editing and use a smart handler
			XMP_OptionBits opts = kXMPFiles_OpenForUpdate | kXMPFiles_OpenUseSmartHandler;

			bool ok;
			SXMPFiles myFile;
			std::string status = &quot;&quot;;

			// First we try and open the file
			ok = myFile.OpenFile(filename, kXMP_UnknownFile, opts);

			// If the file is open then read get the XMP data
			if(ok)
			{
				cout &lt;&lt; status &lt;&lt; endl;
				cout &lt;&lt; filename &lt;&lt; &quot; is opened successfully&quot; &lt;&lt; endl;
				myFile.CloseFile();
			}
			else
			{
				cout &lt;&lt; &quot;Unable to open &quot; &lt;&lt; filename &lt;&lt; endl;
			}
		}
		catch(XMP_Error &amp; e)
		{
			cout &lt;&lt; &quot;ERROR: &quot; &lt;&lt; e.GetErrMsg() &lt;&lt; endl;
		}

		// Terminate the toolkit
		SXMPFiles::Terminate();
		SXMPMeta::Terminate();

	}
	else
	{
		cout &lt;&lt; &quot;Could not initialize SXMPFiles.&quot;;
		return -1;
	}
	cin.get();
	return 0;
}
</code></pre>
<p>und hier mal die Bat:</p>
<pre><code>C:\\Debug\\Xmp4mSystem.exe
PAUSE
</code></pre>
<p>Ich hoffe ja, dass mir bei der Batch - Datei einfach nur ein nötiger Parameter fehlt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Vielen Dank für die Hilfe<br />
geneticZ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681353</guid><dc:creator><![CDATA[geneticZ]]></dc:creator><pubDate>Tue, 17 Mar 2009 09:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeiten mit dem Adobe XMP SDK on Tue, 17 Mar 2009 09:55:07 GMT]]></title><description><![CDATA[<p>Startest du das Programm mit einem doppelklick, so ist das aktuelle Verzeichnis das Verzeichnis, in dem das Programm liegt. Startest du die BAT-Datei, so ist das aktuelle Verzeichnis, das Verzeichnis der BAT-Datei.</p>
<p>Das bedeutet, du öffnest die Datei &quot;C:\Irgend\was\anderes\bild.jpg&quot;, statt &quot;C:\Debug\bild.jpg&quot;.</p>
<p>Du kannst das lösen, indem du in die BAT-Datei noch folgende Zeilen einfügst.</p>
<pre><code>C:
cd \Debug\
Xmp4mSystem.exe
pause
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1681362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681362</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 17 Mar 2009 09:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeiten mit dem Adobe XMP SDK on Tue, 17 Mar 2009 12:44:57 GMT]]></title><description><![CDATA[<p>Ich bin begeistert! Es geht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Vielen Dank schonmal...</p>
<p>Das führt mich allerdings zu meiner nächsten Frage, die jetzt nicht so unmittelbar mit C++ zu tun hat, vielleicht wird sie mir aber trotzdem beantwortet...</p>
<p>Es gibt die möglichkeit mit Photoshop Javascript Dateien auszuführen, das ganze nennt sich dann PS-Script. Möchte ich mein XMP-Programm dann via Photoshop öffnen kann ich dieses Script hier verwenden:</p>
<pre><code>var bat = new File( $.getenv(&quot;public&quot;) + &quot;/xmp.bat&quot;); 
  bat.open(&quot;w&quot;); 
  bat.writeln(&quot;C:&quot;);
  bat.writeln(&quot;cd \\Debug\\&quot;);
  bat.writeln(&quot;Xmp4mSystem.exe &quot;);
  bat.writeln(&quot;pause&quot;);
  bat.close(); 
  bat.execute();
</code></pre>
<p>Damit schreibe ich die Batch-Datei in einen nicht schreibgeschützen Ordner und führe sie dann aus, welche wiederrum mein C++ Programm ausführt! Das funktioniert! (Achtung nur mit PS-Script getestet)</p>
<p>Es gibt aber auch die Möglichkeit direkt die Exe via PS-Script aufzurufen:</p>
<pre><code>var xmp= new File(&quot;/c/Debug/Xmp4mSystem.exe&quot;); 
xmp.execute();
</code></pre>
<p>Da bekomme ich aber leider dann wieder die Meldung dass das Bild nicht geöffnet werden kann! Ist das das selbe Problem dass ich auch mit der Bat davor hatte? Oder liegt das an was anderem?</p>
<p>Ich weiss dass die Frage hier nicht wirklich ins Forum passt, aber sie hängt halt gleich unmittelbar mit der oberen zusammen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Vielen Dank für die Hilfe<br />
geneticZ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681461</guid><dc:creator><![CDATA[geneticZ]]></dc:creator><pubDate>Tue, 17 Mar 2009 12:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeiten mit dem Adobe XMP SDK on Tue, 17 Mar 2009 13:19:18 GMT]]></title><description><![CDATA[<p>Das ist exakt das gleiche Problem. Die Datei wird im aktuellen Verzeichnis geöffnet. Also entweder wechselst du das aktuelle Verzeichnis (so dass das aktuelle Verzeichnis das Bild enthält) vor dem Start des Programms, oder du trägst den <em>vollständigen</em> Pfad zu deinem Bild in dein C++-Programm ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681493</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 17 Mar 2009 13:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Arbeiten mit dem Adobe XMP SDK on Tue, 17 Mar 2009 13:46:24 GMT]]></title><description><![CDATA[<p>Ja, du hast recht. Ich hab jetzt im Code den kompletten Pfad zum Bild verwendet.<br />
Jetzt funktioniert alles!<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1681524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1681524</guid><dc:creator><![CDATA[geneticZ]]></dc:creator><pubDate>Tue, 17 Mar 2009 13:46:24 GMT</pubDate></item></channel></rss>