Zum Inhalt springen

DatenTyp Variant für DLL


Empfohlene Beiträge

Weis jemand welcher Typ in C++ (kann auch ein Typ aus dem MFC sein) dem Variant aus VB6 entspricht.

Ich schreibe grade an ner DLL in VC++, die von VB6 dann benutzt wird und muss da einen Variant zurück liefern.

VARIANT und _variant_t scheinen Falsch zu sein weil in VB nur Müll ankommt wenn ich die Benutze.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von CyberKiller

varOutPut = adoField->Value;

Damit ist nicht viel anzufangen. Was ist varOutPut (Typ), und woher kommt er (lokale Variable, Wertparameter, Referenzparameter,...)?

Allgemeine funktioniert so eine Zuweisung nur, wenn varOutPut vom Typ _variant_t ist. Wenn Du mit "rohen" VARIANTs umgehst, musst du die zugehörigen Funktionen (VariantInit, VariantCopy, VariantClear usw.) verwenden:

VariantCopy( &varOutput, &adoField->Value );

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok ma die ganze Function posten:


VARIANT _stdcall  test(long intest)

{

	ADODB::_ConnectionPtr Con = NULL;

	ADODB::_RecordsetPtr RecSet = NULL;

	ADODB::FieldPtr Field;

	VARIANT *RecordsAffected = NULL;

	_variant_t varOutPut;


	if (Con.CreateInstance(__uuidof(ADODB::Connection), NULL) != 0)

	{

		varOutPut = "ADODB Error";

		return varOutPut;

	}


	try

	{

		Con->Open("DSN=ODBCLink; UID=username; Password=pass", "", "", 0);

	}

	catch (int Exception)

	{

		varOutPut = "ADODB Connection Error";

		return varOutPut;

	}

                // nur BSP Query...

	RecSet = Con->Execute("SELECT Count(merge) AS Anzahl FROM OSTD.mlp_header", RecordsAffected, 1);


	Field = RecSet->Fields->GetItem("Anzahl");


    varOutPut = Field->Value;



	RecSet->Close();

    Con->Close();


	return varOutPut;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube, dass VARIANT als Rückgabetyp nicht funktioniert. Mit einem VARIANT-Referenzparameter funktioniert es:


Private Declare Function VarTest Lib "test_dll.dll" _
(ByRef v As Variant) As Long

--------------------------------------------------

signed long _stdcall VarTest( VARIANT* pv )
{
_variant_t v( "Huhu" );
VariantCopy( pv, &v );
return 0;
}[/CODE]

Es liegt vermutlich daran, dass VARIANT keinen funktionsfähigen Copykonstruktor besitzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von CyberKiller

Hmm ok du hast deine Function aber als Long definiert, wie mach ich das nun bei meiner function die als Variant definiert ist ?

Du sollst sie eben nicht als VARIANT definieren. Das ist ja der Trick bei der Sache. Der VARIANT wird nicht über den Rückgabewert, sondern über einen Referenzparameter an VB zurückgegeben. Um das zu demonstrieren, habe ich das Beispiel doch geschrieben. ;)

Aber ich habe Probleme damit dem _variant_t die sachen vom ADODB::FieldPtr Field zu übergeben :-(
_variant_t ist eine Wrapperklasse für VARIANT, damit kann VB nichts anfangen. Aber was meinst du jetzt mit "Probleme"? Bekommst du eine Fehlermeldung?
Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habe der variable mal einen festen text zugewissen, des geht wunderbar.

mit zahlen geht es auch nur mit der übergabe von diesem ADODB Feld geht es leider nicht.

Aber ich habe jetzt die lösung, es lag wirklich am ADODB Feld.

Wenn man die Daten vom ADODB Feld an eine _variant_t Variable übergeben will

mus man einfach nur GetValue() benutzen anstelle von nur Value

varOutPut = Field->GetValue();

Ma sehen ob ich damit auch arrays ubergeben kann :-)

Also dann Danke für deine Hilfe Klotzkopp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...