SafeArray - Probleme
-
Hi zusammen ich hab folgende FKT:
void FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,COleSafeArray* sa) { VARIANT v; long index[2]; index[0] = iRow; index[1] = iCol; VariantInit(&v); v.vt = VT_BSTR; v.bstrVal = SysAllocString(sz); sa->PutElement(index, v.bstrVal); SysFreeString(v.bstrVal); VariantClear(&v); }
wenn ich diese FKT so wie sie da steht in meiner View aufrufe funktioniert es einwandfrei. Wenn ich sie aber (um sie als Member zu machen um Header einbinde, dann krieg ich immer Linker Errors!
Woran liegt das?
Danke schon im Voraus
-
krieg ich immer Linker Errors!
Oha.
-
oha??
Was falsch???
-
Normalerweise postet man die Fehlermeldungen.
-
OK ich geb dir recht kannst du was hiermit anfangen?
unresolved external symbol "public: void __thiscall CACRSQLView::FillSafeArray(unsigned short *,int,int,class COleSafeArray *)" (?FillSafeArray@CACRSQLView@@QAEXPAGHHPAVCOleSafeArray@@@Z)
-
Du hast im Cpp vergessen, die Funktion zur Klasse zuzuordnen.
[cpp]void **CACRSQLView::FillSafeArray(OLECHAR FAR sz, int iRow, int iCol,COleSafeArray sa)[/cpp]unresolved external symbol
heißt einfach "Ich habe den Rumpf der Funktion ... nicht gefunden".
-
Oh man als ich deine Antwort gesehen hab hätte ich mir schier in den Arsch gebissen! Wie dumm ich bin, und vor allem dass ich das nicht gemerkt hab. Die kurze Erläuterung war gut, jetzt versteh ich wenigstens mal was er da bemengelt wenn die kommt!
Vielen lieben Dank bist wieder mal meine Rettung gewesen.
*knutschsmily*
DANKE
-
Hey du ich bins nochmal. Die Funktion geht zwar jetzt, aber mit dem verwenden hab ich immernoch Probs. Pass auf ich zeig dir (euch) erst mal meinen Code und was ich machen will:
void CACRSQLView::FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,COleSafeArray* sa) { VARIANT v; long index[2]; index[0] = iRow; index[1] = iCol; VariantInit(&v); v.vt = VT_BSTR; v.bstrVal = SysAllocString(sz); sa->PutElement(index, v.bstrVal); SysFreeString(v.bstrVal); VariantClear(&v); }
//Fill A5:B9 with an array of values { COleSafeArray saRet; DWORD numElements[]={5,2}; //5x2element array saRet.Create(VT_BSTR, 2, numElements); COleSafeArray saRet; DWORD numElements[]={5,2}; //5x2 element array saRet.Create(VT_BSTR, 2, numElements); //Fill the 5x2 SafeArray with the following data: FillSafeArray(L"6", 0, 0, &saRet); FillSafeArray(L"0815Text", 0, 1, &saRet); FillSafeArray(L"7", 1, 0, &saRet); FillSafeArray(L"immer Text", 1, 1, &saRet); FillSafeArray(L"8", 2, 0, &saRet); FillSafeArray(L"=max(B10:B15)", 2, 1, &saRet); FillSafeArray(L"9", 3, 0, &saRet); FillSafeArray(L"", 3, 1, &saRet); FillSafeArray(L"...", 4, 0, &saRet); FillSafeArray(L"", 4, 1, &saRet); range = sheet.GetRange(COleVariant("A5"), COleVariant("B9")); range.SetValue(COleVariant(saRet)); saRet.Detach(); }
So jetzt sollte doch FillSafeArray die Daten die ich übergebe in mein saRet schreiben. bzw. das tut sie. Jetzt ist das aber so wie es hier steht alles in der View Klasse. Ich wollte aber Daten aus meinem Set ins Safearray. Also hab ich mir das alles im Set vorbereitet und wollte dann einfach das Safearray als Rückgabewert. Aber da kackt er mir völlig ab! Geht das generell nicht oder hab ich vermutlich nen Fehler drin?
Was ganz anderes. Wenn ich jetzt z.B. m_pSet->ID ins Array füllen will, wie mach ich das?
Oder (alles oder Fragen weil ich nur eins davon brauch)
Wie kann ich mit SetValue ein int übergeben?
SetValue(const VARIANT &newValue)
oder muss ich jedes mal davor casten?wär halt nicht si schön wenn ich 60 Werte schreibe, dann 60 mal casten 60 mal get Range und 60 mal setValue.Ich hoff du (oder sonst wer) kannst mir helfen.
Vielen Dank
(warst du gestern nicht da? es war so ruhig hier im Forum)
-
Polofreak schrieb:
(warst du gestern nicht da? es war so ruhig hier im Forum)
Hihi, doch ich war hier.
Es gab blos keine Fragen, auf die ich Antworten gehabt hätte.
Leider habe ich von Ole noch immer keine Ahnung.
Also hab ich mir das alles im Set vorbereitet und wollte dann einfach das Safearray als Rückgabewert. Aber da kackt er mir völlig ab! Geht das generell nicht oder hab ich vermutlich nen Fehler drin?
Was heißt bitte "kackt ab"?
So nebenbei: Du brauchst da unbedingt ein SafeArray? Ist das für den Excelkram?
Wenn du gar nicht weiterkommst, muss ich mal ne Mail an einen schreiben, der hier leider nur noch sehr selten ist - der hatte da mehr Ahnung.
-
Ja es ist für mein scheiß Excelkram! Ich hab mittlerweile alle Varianten raus gefunden auf Excel zugreifen zu können. Die scheint jetzt das zu können was ich von ihr will. Das Problem ist ich kann nicht so richtig damit umgehen. Ich weiß drum auch nicht ob das unbedingt zwingend ein SafeArray sein muss. Ich will halt nicht jedes Feld einzeln rein schreiben, und will drum ein array rein schreiben.
range = sheet.GetRange(COleVariant("A5"), COleVariant("B9")); range.SetValue(COleVariant(saRet));
so geht das wobei jetzt saRet eben mein Safearray ist. ich glaub ich probier mal einfach ein Stringarray oder so zu übergeben. vielleicht gehts ja auch.
Hab leider auch NOCH nicht so die Ahnung!
-
Wenns für Excel ist, dann musst du wohl beim SafeArray bleiben.
Office will Ole-Variablen haben.
-
Hey des isch so ne Scheiße! Ich bin froh wenn ich das Projekt fertig hab und endlich .wav files in ASCII konvertieren darf! MS Office widerstrebt mir immer mehr, ich nutze es immer widerwilliger, wegen so ner scheiße!
Danke trotzdem!