COM Schnittstelle und BSTR
-
BSTR bstrParam = SysAllocString(CA2CW(dataVect.AtAsText(0)));
-
Jochen Kalmbach schrieb:
BSTR bstrParam = SysAllocString(CA2CW(dataVect.AtAsText(0)));
error C3861: 'CA2CW': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
Was muss ich da noch einfügen und wie schreib ich dann die Deklaration?
Fons
-
Was für eine Version von VS? VC7 oder später?
#include <atlbase.h> #include <atlconv.h>
-
Jochen Kalmbach schrieb:
Was für eine Version von VS? VC7 oder später?
VC7
Microsoft Visual C++ .NET 69589-706-0273621-18046Der Fehler bleibt!?
error C3861: 'CA2CW': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
-
Jochen Kalmbach schrieb:
BSTR bstrParam = SysAllocString(CA2CW(dataVect.AtAsText(0)));
Hallo,
leider finde ich weder bei Google noch in der Help oder bei MSDN Hinweise zu CA2CW.
Gruß
Fons
-
???: ATL and MFC String Conversion Macros
http://msdn2.microsoft.com/library/87zae4a3.aspx
-
Jochen Kalmbach schrieb:
???: ATL and MFC String Conversion Macros
http://msdn2.microsoft.com/library/87zae4a3.aspxDanke Jochen,
das ist ja alles ganz "nett", aber für einen Anfänger undurchschaubar, finde ich.
Gibts denn keinen konkreten Lösungsvorschlag, einen anständigen BSTR aus dem dataVect zu bauen:BSTR bstrParam = SysAllocString(dataVect.AtAsText(0));
gibt wie gesagt Fehler zurück:
error C2664: 'SysAllocString': Konvertierung des Parameters 1 von 'const fmx::Text' in 'const OLECHAR *' nicht möglichVielleicht hilft ja die Klassendefinition von DataVect weiter:
namespace fmx { class Text; class FixPt; class DateTime; class BinaryData; class Data; class DataVect; class ExprEnv; FMX_PROCPTR( errcode, ExtPluginType ) ( short functionId, const ExprEnv& env, const DataVect& parms, Data& result ); class DataVect { public: inline ulong Size () const; inline void Clear (); inline bool IsEmpty () const; inline void PushBack ( const Data &data ); inline Data *PopBack (); inline const Data &At ( ulong position ) const; inline const Text &AtAsText ( ulong position ) const; inline const FixPt &AtAsNumber ( ulong position ) const; inline const DateTime &AtAsDate ( ulong position ) const; inline const DateTime &AtAsTime ( ulong position ) const; inline const DateTime &AtAsTimeStamp ( ulong position ) const; inline bool AtAsBoolean ( ulong position ) const; inline const BinaryData &AtAsBinaryData ( ulong position ) const; inline void operator delete ( void *obj ); private: DataVect (); DataVect ( const DataVect& other ); }; ...
AM VERZWEIFELN !
Fons
-
Was soll den "Text" sein??? Du musst diesen "Text" in einen "const wchar_t*" umwandeln!
-
Jochen Kalmbach schrieb:
Was soll den "Text" sein??? Du musst diesen "Text" in einen "const wchar_t*" umwandeln!
Danke und Sorry Jochen, so meldet es eben der Compiler.
*'SysAllocString': Konvertierung des Parameters 1 von 'const fmx::Text' in 'const OLECHAR ' nicht möglichconst fmx::Text ist der Inhalt aus dataVect.AtAsText(0)
Kannst Du mir bitte ein paar Codezeilen schreiben (mit notwendigen Includes etc.), wie ich denn den Text in den "const wchar_t*" umwandle!
Meinetwegen auch mehrere Möglichkeiten zum Testen.
Gruß
Fons
-
Ich habe keine Ahnung was Text sein soll, deshalb kann ich Dir nicht helfen!
-
Jochen Kalmbach schrieb:
Ich habe keine Ahnung was Text sein soll, deshalb kann ich Dir nicht helfen!
Hallo Jochen,
Du hast mir ja schon viel weitergeholfen, ich verstehe aber da jetzt Deinen Ärger und die Reaktion nicht. Wenn Du mir nicht weiterhelfen willst, dann sags einfach, ist auch o.k.Es geht nach wie vor um den Inhalt von const fmx::DataVect& dataVect, da stecken die Parameter, die an die Funktion übergeben werden drin. Diese sollen dann nach BSTR gewandelt werden.
Die Verweise auf die MSDN etc. helfen mir nicht, weil ich das nicht verstehe. Ich bräuchte bitte ein paar konkrete Codezeilen.
Nix für ungut.
Fons
-
Es geht ja nicht darum, dass ich Dir nicht helfen will... ich kann Dir nur nicht...
Du musst uns schon sagen was denn "Text" sein soll... Zeig uns also am besten die Definition dieser Klasse...
-
Jochen Kalmbach schrieb:
Es geht ja nicht darum, dass ich Dir nicht helfen will... ich kann Dir nur nicht...
Du musst uns schon sagen was denn "Text" sein soll... Zeig uns also am besten die Definition dieser Klasse...Hab ich doch schon weiter oben. Nochmal:
namespace fmx { class Text; class FixPt; class DateTime; class BinaryData; class Data; class DataVect; class ExprEnv; FMX_PROCPTR( errcode, ExtPluginType ) ( short functionId, const ExprEnv& env, const DataVect& parms, Data& result ); class DataVect { public: inline ulong Size () const; inline void Clear (); inline bool IsEmpty () const; inline void PushBack ( const Data &data ); inline Data *PopBack (); inline const Data &At ( ulong position ) const; inline const Text &AtAsText ( ulong position ) const; inline const FixPt &AtAsNumber ( ulong position ) const; inline const DateTime &AtAsDate ( ulong position ) const; inline const DateTime &AtAsTime ( ulong position ) const; inline const DateTime &AtAsTimeStamp ( ulong position ) const; inline bool AtAsBoolean ( ulong position ) const; inline const BinaryData &AtAsBinaryData ( ulong position ) const; inline void operator delete ( void *obj ); private: DataVect (); DataVect ( const DataVect& other ); };
Hoffentlich hilfts
Fons
-
Hmmmm... du solltest die Definition der Klasse "Text" zeigen, nicht "DataVect"!
-
Jochen Kalmbach schrieb:
Hmmmm... du solltest die Definition der Klasse "Text" zeigen, nicht "DataVect"!
class DataVect { public: .. inline const Text &AtAsText ( ulong position ) const; ...
BSTR bstrParam = SysAllocString(dataVect.AtAsText(0));
Das AtAsText ist der Wert im error C2664: 'SysAllocString': Konvertierung des Parameters 1 von 'const fmx::Text' in 'const OLECHAR *' nicht möglich.
Definition:
inline const Text &DataVect::AtAsText ( ulong position ) const { _fmxcpt _x; const Text &_rtn = FM_DataVect_AtAsText ( this, position, _x ); _x.Check (); return _rtn;
-
Ich weiss immer noch nicht was "Text" ist... geht doch mal mit dem Cursor auf "Text" und drücke F12... was dann kommt, poste bitte hier... sonst muss ich leider aufgeben... vielleicht ist jemand anders in der Lage Dich zu verstehen... ich bin es (bisher) nicht...
-
Jochen Kalmbach schrieb:
Ich weiss immer noch nicht was "Text" ist... geht doch mal mit dem Cursor auf "Text" und drücke F12... was dann kommt, poste bitte hier... sonst muss ich leider aufgeben... vielleicht ist jemand anders in der Lage Dich zu verstehen... ich bin es (bisher) nicht...
Das hab ich vorhin bereits gemacht - da komm ich zur Definition:
extern "C++" { namespace fmx { ... inline const Text &DataVect::AtAsText ( ulong position ) const { _fmxcpt _x; const Text &_rtn = FM_DataVect_AtAsText ( this, position, _x ); _x.Check (); return _rtn; } ... }
Vielleicht hilft ja der Code eines funktionierenden Beispiels:
FMX_PROC(fmx::errcode) MyFunction1(short funcId, const fmx::ExprEnv& environment, const fmx::DataVect& dataVect, fmx::Data& result) { fmx::errcode errorResult = 0; environment; // Append an arbitrary number of strings together. fmx::TextAutoPtr resultTxt; fmx::ulong nParams = dataVect.Size(); fmx::ulong j; if (nParams > 0) { for ( j = 0; j < nParams; j++ ) { resultTxt->AppendText( dataVect.AtAsText(j), 0, static_cast<fmx::ulong>(-1) ); } result.SetAsText( *resultTxt, dataVect.At(0).GetLocale() ); } else { errorResult = -1; // This is just an example of returning an error. };// nParams > 0 return(errorResult); }
Fons