<?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[DLL Problem]]></title><description><![CDATA[<p>Ich habe ein grosses Problem, bezüglich einer von mir in VB6<br />
erstellten DLL. Dabei handelt es sich um eine Klasse, mit der man<br />
den MX-Eintrag eines Mail-Servers erfragen kann. Sie<br />
funktioniert auch einwandfrei. (Habe die DLL in VB6 und <a href="http://VB.NET" rel="nofollow">VB.NET</a> ausprobiert)<br />
Es ist aber unbedingt erforderlich, das diese DLL von VC++6 aus angesprochen<br />
werden kann. Nach tagelanger Suche in diversen Foren und der MSDN, konnte<br />
ich nur rausfinden, wie man mit VC++ DLLs erstellt und einbindet, oder<br />
mit VC++ geschriebene in VB6 nutzt. Ich wäre sehr dankbar,<br />
wenn mir jemand eine einfache Schritt für Schritt Anleitung<br />
geben könnte wie ich diese VB6-DLL in VC++6 zum laufen<br />
bringe, oder wie ich den VB6-Code nach C++ portieren<br />
kann. Dabei ginge es mir eigentlich nur um die API-Deklaration,<br />
wozu ich leider auch keine brauchbaren Infos finden konnte. Die<br />
windows.h ist eingebunden. Der Compiler behauptet aber schon bei der ersten<br />
Funktion 'DnsQuery_A' das er sie nicht finden kann. Laut einer Beschreibung<br />
die ich irgendwo gefunden habe, sollte es aber schon alleine durch das<br />
Einbinden von windows.h funktionieren. (Hab es erfolgreich mit 'GetComputerName'<br />
ausprobiert) Leider konnte ich die beiden Konstanten innerhalb der Klasse auch nicht deklarieren. (Compilerfehler)<br />
Wie man allgemein Klassen in C++ erstellt und verwendet ist mir klar.<br />
Wäre wirklich sehr dankbar wenn mir jemand weiterhelfen könnte,<br />
weis sonst nicht mehr weiter.</p>
<p>Hier die VB6-Klasse:</p>
<p>Option Explicit</p>
<p>Private Declare Function DnsQuery Lib &quot;Dnsapi.dll&quot; Alias &quot;DnsQuery_A&quot; ( _<br />
ByVal Name As String, ByVal wType As Integer, ByVal Options As Long, _<br />
aipServers As Any, ppQueryResultsSet As Long, ByVal pReserved As Long) As Long</p>
<p>Private Declare Sub CopyMem Lib &quot;kernel32.dll&quot; Alias &quot;RtlMoveMemory&quot; ( _<br />
pTo As Any, uFrom As Any, ByVal lSize As Long)</p>
<p>Private Declare Function StrLenA Lib &quot;kernel32.dll&quot; Alias &quot;lstrlenA&quot; ( _<br />
ByVal PTR As Long) As Long</p>
<p>Private Declare Function StrCopyA Lib &quot;kernel32.dll&quot; Alias &quot;lstrcpyA&quot; ( _<br />
ByVal retval As String, ByVal PTR As Long) As Long</p>
<p>Private Declare Function DnsRecordListFree Lib &quot;Dnsapi.dll&quot; ( _<br />
ByVal pDnsRecord As Long, ByVal DnsFreeRecordListDeep As Long) As Long</p>
<p>Private Type DNS_SOA_DATA<br />
pNamePrimaryServer As String<br />
pNameAdministrator As String<br />
dwSerialNo As Long<br />
dwRefresh As Long<br />
dwRetry As Long<br />
dwExpire As Long<br />
dwDefaultTtl As Long<br />
End Type</p>
<p>Private Type DNS_TEXT_DATA<br />
DNSText As String<br />
End Type</p>
<p>Private Type DNS_MX_DATA<br />
pNameExchange As String<br />
End Type</p>
<p>Private Type DNS_NS_DATA<br />
pNameServer As String<br />
End Type</p>
<p>Private Type DNS_PTR_DATA<br />
pHostName As String<br />
End Type</p>
<p>Private Type VBDnsRecord<br />
pNext As Long<br />
pName As Long<br />
wType As Integer<br />
wDataLength As Integer<br />
Flags As Long<br />
dwTTL As Long<br />
dwReserved As Long<br />
prt As Long<br />
others(9) As Long<br />
End Type</p>
<p>Private Type DNSRecord<br />
Name As String<br />
Type As Integer<br />
RR As String<br />
Flags As Long<br />
SOA As DNS_SOA_DATA<br />
TEXT As DNS_TEXT_DATA<br />
mx As DNS_MX_DATA<br />
NS As DNS_NS_DATA<br />
PTR As DNS_PTR_DATA<br />
End Type</p>
<p>Private Type MXQuery<br />
mx As String<br />
success As Boolean<br />
End Type<br />
Private QueryResult As MXQuery</p>
<p>Private Const DNS_TYPE_MX As Long = &amp;HF<br />
Private Const DnsFreeRecordListDeep As Long = 1&amp;</p>
<p>Public Function MXLookup(URL As String)<br />
Dim DNSRec As Long<br />
Dim MyRecord As VBDnsRecord<br />
Dim Records As DNSRecord<br />
Dim x As Long</p>
<p>x = DnsQuery(URL, DNS_TYPE_MX, 0, ByVal 0, DNSRec, 0)</p>
<p>If x = 0 Then<br />
CopyMem MyRecord, ByVal DNSRec, 64</p>
<p>x = MyRecord.prt<br />
Records.mx.pNameExchange = String$(StrLenA(x), 0)<br />
StrCopyA Records.mx.pNameExchange, x</p>
<p>DnsRecordListFree DNSRec, DnsFreeRecordListDeep</p>
<p><a href="http://QueryResult.mx" rel="nofollow">QueryResult.mx</a> = Records.mx.pNameExchange<br />
QueryResult.success = True<br />
Else<br />
<a href="http://QueryResult.mx" rel="nofollow">QueryResult.mx</a> = &quot;&quot;<br />
QueryResult.success = False<br />
End If</p>
<p>End Function</p>
<p>Public Property Get mx() As String<br />
mx = <a href="http://QueryResult.mx" rel="nofollow">QueryResult.mx</a><br />
End Property</p>
<p>Public Property Get success() As Boolean<br />
success = QueryResult.success<br />
End Property</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142242/dll-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:26:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142242.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Mar 2006 22:22:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to DLL Problem on Tue, 28 Mar 2006 22:22:21 GMT]]></title><description><![CDATA[<p>Ich habe ein grosses Problem, bezüglich einer von mir in VB6<br />
erstellten DLL. Dabei handelt es sich um eine Klasse, mit der man<br />
den MX-Eintrag eines Mail-Servers erfragen kann. Sie<br />
funktioniert auch einwandfrei. (Habe die DLL in VB6 und <a href="http://VB.NET" rel="nofollow">VB.NET</a> ausprobiert)<br />
Es ist aber unbedingt erforderlich, das diese DLL von VC++6 aus angesprochen<br />
werden kann. Nach tagelanger Suche in diversen Foren und der MSDN, konnte<br />
ich nur rausfinden, wie man mit VC++ DLLs erstellt und einbindet, oder<br />
mit VC++ geschriebene in VB6 nutzt. Ich wäre sehr dankbar,<br />
wenn mir jemand eine einfache Schritt für Schritt Anleitung<br />
geben könnte wie ich diese VB6-DLL in VC++6 zum laufen<br />
bringe, oder wie ich den VB6-Code nach C++ portieren<br />
kann. Dabei ginge es mir eigentlich nur um die API-Deklaration,<br />
wozu ich leider auch keine brauchbaren Infos finden konnte. Die<br />
windows.h ist eingebunden. Der Compiler behauptet aber schon bei der ersten<br />
Funktion 'DnsQuery_A' das er sie nicht finden kann. Laut einer Beschreibung<br />
die ich irgendwo gefunden habe, sollte es aber schon alleine durch das<br />
Einbinden von windows.h funktionieren. (Hab es erfolgreich mit 'GetComputerName'<br />
ausprobiert) Leider konnte ich die beiden Konstanten innerhalb der Klasse auch nicht deklarieren. (Compilerfehler)<br />
Wie man allgemein Klassen in C++ erstellt und verwendet ist mir klar.<br />
Wäre wirklich sehr dankbar wenn mir jemand weiterhelfen könnte,<br />
weis sonst nicht mehr weiter.</p>
<p>Hier die VB6-Klasse:</p>
<p>Option Explicit</p>
<p>Private Declare Function DnsQuery Lib &quot;Dnsapi.dll&quot; Alias &quot;DnsQuery_A&quot; ( _<br />
ByVal Name As String, ByVal wType As Integer, ByVal Options As Long, _<br />
aipServers As Any, ppQueryResultsSet As Long, ByVal pReserved As Long) As Long</p>
<p>Private Declare Sub CopyMem Lib &quot;kernel32.dll&quot; Alias &quot;RtlMoveMemory&quot; ( _<br />
pTo As Any, uFrom As Any, ByVal lSize As Long)</p>
<p>Private Declare Function StrLenA Lib &quot;kernel32.dll&quot; Alias &quot;lstrlenA&quot; ( _<br />
ByVal PTR As Long) As Long</p>
<p>Private Declare Function StrCopyA Lib &quot;kernel32.dll&quot; Alias &quot;lstrcpyA&quot; ( _<br />
ByVal retval As String, ByVal PTR As Long) As Long</p>
<p>Private Declare Function DnsRecordListFree Lib &quot;Dnsapi.dll&quot; ( _<br />
ByVal pDnsRecord As Long, ByVal DnsFreeRecordListDeep As Long) As Long</p>
<p>Private Type DNS_SOA_DATA<br />
pNamePrimaryServer As String<br />
pNameAdministrator As String<br />
dwSerialNo As Long<br />
dwRefresh As Long<br />
dwRetry As Long<br />
dwExpire As Long<br />
dwDefaultTtl As Long<br />
End Type</p>
<p>Private Type DNS_TEXT_DATA<br />
DNSText As String<br />
End Type</p>
<p>Private Type DNS_MX_DATA<br />
pNameExchange As String<br />
End Type</p>
<p>Private Type DNS_NS_DATA<br />
pNameServer As String<br />
End Type</p>
<p>Private Type DNS_PTR_DATA<br />
pHostName As String<br />
End Type</p>
<p>Private Type VBDnsRecord<br />
pNext As Long<br />
pName As Long<br />
wType As Integer<br />
wDataLength As Integer<br />
Flags As Long<br />
dwTTL As Long<br />
dwReserved As Long<br />
prt As Long<br />
others(9) As Long<br />
End Type</p>
<p>Private Type DNSRecord<br />
Name As String<br />
Type As Integer<br />
RR As String<br />
Flags As Long<br />
SOA As DNS_SOA_DATA<br />
TEXT As DNS_TEXT_DATA<br />
mx As DNS_MX_DATA<br />
NS As DNS_NS_DATA<br />
PTR As DNS_PTR_DATA<br />
End Type</p>
<p>Private Type MXQuery<br />
mx As String<br />
success As Boolean<br />
End Type<br />
Private QueryResult As MXQuery</p>
<p>Private Const DNS_TYPE_MX As Long = &amp;HF<br />
Private Const DnsFreeRecordListDeep As Long = 1&amp;</p>
<p>Public Function MXLookup(URL As String)<br />
Dim DNSRec As Long<br />
Dim MyRecord As VBDnsRecord<br />
Dim Records As DNSRecord<br />
Dim x As Long</p>
<p>x = DnsQuery(URL, DNS_TYPE_MX, 0, ByVal 0, DNSRec, 0)</p>
<p>If x = 0 Then<br />
CopyMem MyRecord, ByVal DNSRec, 64</p>
<p>x = MyRecord.prt<br />
Records.mx.pNameExchange = String$(StrLenA(x), 0)<br />
StrCopyA Records.mx.pNameExchange, x</p>
<p>DnsRecordListFree DNSRec, DnsFreeRecordListDeep</p>
<p><a href="http://QueryResult.mx" rel="nofollow">QueryResult.mx</a> = Records.mx.pNameExchange<br />
QueryResult.success = True<br />
Else<br />
<a href="http://QueryResult.mx" rel="nofollow">QueryResult.mx</a> = &quot;&quot;<br />
QueryResult.success = False<br />
End If</p>
<p>End Function</p>
<p>Public Property Get mx() As String<br />
mx = <a href="http://QueryResult.mx" rel="nofollow">QueryResult.mx</a><br />
End Property</p>
<p>Public Property Get success() As Boolean<br />
success = QueryResult.success<br />
End Property</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025997</guid><dc:creator><![CDATA[fsciip4]]></dc:creator><pubDate>Tue, 28 Mar 2006 22:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to DLL Problem on Tue, 04 Apr 2006 06:17:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe dasselbe Problem und habe folgendes rausgefunden:<br />
Mit Klassen-Assistent kann man aus einer DLL die *.cpp und *.h generieren.<br />
(Rechte Maustaste, Class-Wizard, Add Class, From a type library)</p>
<p>Doch dann taucht das nächste Problem auf. Die generierten Daten sind MFC abhängig, verlangen nach &quot;afxdisp.h&quot; und melden bei &quot;windows.h&quot; ein Fehler.</p>
<p>Kennt vielleicht jemand die Lösung?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1029995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1029995</guid><dc:creator><![CDATA[qwerty]]></dc:creator><pubDate>Tue, 04 Apr 2006 06:17:25 GMT</pubDate></item></channel></rss>