<?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[Code einer Templatefunktion klassenextern definieren]]></title><description><![CDATA[<p>Hallo</p>
<p>wie müsste der Syntax bzw. Code aussehen wenn ich den Code der Funktion Read() klassenextern schreiben möchte. Also über &quot;Cmemory::Read&quot;</p>
<pre><code class="language-cpp">#ifndef __CMEMORY_H_
#define __CMEMORY_H_

class Cmemory
{
	char *pProcexename;
	char *pProcwinname;
	bool SetDebugPrivileges();
public:
	HANDLE	hproc;			// processhandle
	LPDWORD	PID;			// processID
	Cmemory::Cmemory();
	// todo Destructor
	bool	Init(char szProcexename[]=0, char szProcwinname[]=0);
	bool    OpenProc();
	bool	GetStatus();
	bool	ReadMem(DWORD&amp; address, char* recvBuf, int&amp; size);
	template &lt;typename datatype&gt; datatype Read(DWORD&amp; address) // &lt;- Read() klassenintern
	{
		datatype recvData = 0;
		ReadMem(address, (char*)&amp;recvData, sizeof(datatype));
		return recvData;
	}
};

/*
template &lt;typename datatype&gt; datatype Cmemory::Read(DWORD&amp; address) // Fehler, wie wäre der Syntax um das klassenextern zu lösen
{
    datatype recvData = 0;
    ReadMem(address, (char*)&amp;recvData, sizeof(datatype));
    return recvData;
}
*/

#endif // __CMEMORY_H_
</code></pre>
<p>Ich versuche das erste mal mit einem Template zu arbeiten. Die Funktion Read() in meiner Cmemory-Klasse soll in der lage sein folgende Datentypen auszulesen:<br />
<em>unsigned char<br />
signed char<br />
unsigned __int16<br />
signed __int16<br />
unsigned long<br />
signed long<br />
unsigend __int64<br />
signed __int64<br />
double<br />
float</em><br />
...hoffe das funktionert auf diesem Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237637/code-einer-templatefunktion-klassenextern-definieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 07:58:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237637.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Mar 2009 11:56:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Code einer Templatefunktion klassenextern definieren on Tue, 31 Mar 2009 11:56:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>wie müsste der Syntax bzw. Code aussehen wenn ich den Code der Funktion Read() klassenextern schreiben möchte. Also über &quot;Cmemory::Read&quot;</p>
<pre><code class="language-cpp">#ifndef __CMEMORY_H_
#define __CMEMORY_H_

class Cmemory
{
	char *pProcexename;
	char *pProcwinname;
	bool SetDebugPrivileges();
public:
	HANDLE	hproc;			// processhandle
	LPDWORD	PID;			// processID
	Cmemory::Cmemory();
	// todo Destructor
	bool	Init(char szProcexename[]=0, char szProcwinname[]=0);
	bool    OpenProc();
	bool	GetStatus();
	bool	ReadMem(DWORD&amp; address, char* recvBuf, int&amp; size);
	template &lt;typename datatype&gt; datatype Read(DWORD&amp; address) // &lt;- Read() klassenintern
	{
		datatype recvData = 0;
		ReadMem(address, (char*)&amp;recvData, sizeof(datatype));
		return recvData;
	}
};

/*
template &lt;typename datatype&gt; datatype Cmemory::Read(DWORD&amp; address) // Fehler, wie wäre der Syntax um das klassenextern zu lösen
{
    datatype recvData = 0;
    ReadMem(address, (char*)&amp;recvData, sizeof(datatype));
    return recvData;
}
*/

#endif // __CMEMORY_H_
</code></pre>
<p>Ich versuche das erste mal mit einem Template zu arbeiten. Die Funktion Read() in meiner Cmemory-Klasse soll in der lage sein folgende Datentypen auszulesen:<br />
<em>unsigned char<br />
signed char<br />
unsigned __int16<br />
signed __int16<br />
unsigned long<br />
signed long<br />
unsigend __int64<br />
signed __int64<br />
double<br />
float</em><br />
...hoffe das funktionert auf diesem Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1688755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688755</guid><dc:creator><![CDATA[Vollzeitnoob]]></dc:creator><pubDate>Tue, 31 Mar 2009 11:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to Code einer Templatefunktion klassenextern definieren on Tue, 31 Mar 2009 14:15:44 GMT]]></title><description><![CDATA[<p>Mach mal aus den DWORD-Referenzen (DWORD&amp;) DWORD-Pointer (DWORD*). Dann sollte das passen.</p>
<p>/e: und warum nicht memcpy() statt ReadMem()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1688838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688838</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Tue, 31 Mar 2009 14:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to Code einer Templatefunktion klassenextern definieren on Tue, 31 Mar 2009 16:04:17 GMT]]></title><description><![CDATA[<p>memcpy() funktioniert meines wissens nur solange man im Adressraum des eigenen Prozess kopiert. Bei mir handelt es sich um einen fremden Prozess. Ausnahme: DLL-Injection, das möchte ich aber nicht und wäre auch zu umständlich.</p>
<p>Die Parameter für Read() sollten möglichst 'by reference' übergeben werden, das sollte schneller sein als 'by value' (denke ich zumindest). Allerdings musste ich in diesem Fall für die Adresse noch ein &quot;const&quot; hinzufügen, sonnst kommt es zu Fehlern beim Compilieren.</p>
<p>aber mein eigentliches Problem:<br />
Ich will nur den Funktionsprototyp direkt in der Klasse definieren und den eigentlichen Code für Read außerhalt. Nur ich weiß nicht wie man das in Verbindung mit einem Template macht.</p>
<p>irgnedwie so:</p>
<pre><code class="language-cpp">// Cmemory.h
class Cmemory
{   
    // other stuff
    template &lt;typename datatype&gt; bool Read(const unsigned long&amp; address, datatype&amp; recvBuf);
}

// Cmemory.cpp
template &lt;typename datatype&gt; bool Cmemory::Read(const unsigned long&amp; address, datatype&amp; recvBuf)
{
    if (ReadProcessMemory(hproc, (LPVOID)address, &amp;recvBuf, sizeof(datatype), 0)==0)
        return false;    // something went wrong
    return true;    // memory read ok
}
</code></pre>
<p>... generiert Linkerfehler:</p>
<blockquote>
<p>1&gt;main.obj : error LNK2019: unresolved external symbol &quot;public: bool __thiscall Cmemory::Read&lt;float&gt;(unsigned long const &amp;,float &amp;)&quot; (??Read@M@Cmemory@@QAE\_NABKAAM@Z) referenced in function _main  
1>main.obj : error LNK2019: unresolved external symbol "public: bool \_\_thiscall Cmemory::Read<char>(unsigned long const &,char &)" (??Read@D@Cmemory@@QAE_NABKAAD@Z) referenced in function _main</p>
</blockquote>
<p>Der Compiler versuch die Funktion einmal für char und für float zu generieren - damit teste ich atm die Funktion.</p>
<p>So funktioniert es wunderbar:</p>
<pre><code class="language-cpp">#ifndef __CMEMORY_H_
#define __CMEMORY_H_

class Cmemory
{
	char *pProcexename;
	char *pProcwinname;
	bool SetDebugPrivileges();
public:
	HANDLE	hproc;			// processhandle
	LPDWORD	PID;			// processID
	Cmemory::Cmemory();
	// todo Destructor
	bool	Init(char szProcexename[]=0, char szProcwinname[]=0);
	bool    OpenProc();
	bool	GetStatus();
	template &lt;typename datatype&gt; bool Read(const unsigned long&amp; address, datatype&amp; recvBuf)
	{
		if (ReadProcessMemory(hproc, (LPVOID)address, &amp;recvBuf, sizeof(datatype), 0)==0)
			return false;	// something went wrong
		return true;	// memory read ok
	}
};

#endif // __CMEMORY_H_
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1688932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688932</guid><dc:creator><![CDATA[Vollzeitnoob]]></dc:creator><pubDate>Tue, 31 Mar 2009 16:04:17 GMT</pubDate></item><item><title><![CDATA[Reply to Code einer Templatefunktion klassenextern definieren on Wed, 01 Apr 2009 13:39:16 GMT]]></title><description><![CDATA[<p>Kann es sein, dass Du noch VC6 benutzt???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689292</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 01 Apr 2009 13:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to Code einer Templatefunktion klassenextern definieren on Wed, 01 Apr 2009 16:52:02 GMT]]></title><description><![CDATA[<p>Ich verwende MS Visual Studio 2008.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689430</guid><dc:creator><![CDATA[Vollzeitnoob]]></dc:creator><pubDate>Wed, 01 Apr 2009 16:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to Code einer Templatefunktion klassenextern definieren on Thu, 02 Apr 2009 14:04:38 GMT]]></title><description><![CDATA[<p>Ich habe mal aus den DWORD Referenzen DWORD Pointer gemacht, das compiliert bei mir einwandfrei. Den Tipp hatte ich Dir aber schon gegeben....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689916</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Thu, 02 Apr 2009 14:04:38 GMT</pubDate></item></channel></rss>