Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  LPDISPATCH

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
PLM TechnologieForum Leipzig
Autor Thema:  LPDISPATCH (781 mal gelesen)
anki
Mitglied



Sehen Sie sich das Profil von anki an!   Senden Sie eine Private Message an anki  Schreiben Sie einen Gästebucheintrag für anki

Beiträge: 25
Registriert: 26.01.2007

erstellt am: 28. Feb. 2007 17:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe hier ein kleines Problem, dass für euch sicherlich ganz einfach zu lösen ist.
Ich möchte eine .dll mit C++ schreiben. Hier ein Stück von meinem Code:

Code:

CComPtr<IModelDocExtension> swExtension;
CComPtr<ISelectionMgr> SelectionManager;
CComPtr<IMathTransform> Xform; //LPMATHTRANSFORM
LPDISPATCH CurComponent=NULL;
CComPtr<IComponent2> Component;

double* TransArray[4][4];
VARIANT_BOOL selOK, Retval;
HRESULT hres = NOERROR;

        // Auswahl eines Bauteils
hres = swModel->get_Extension(&swExtension);
hres = swExtension->SelectByID2(_T("Sonnenrad-1@Planetengetriebe"), _T("COMPONENT"), 0.005339457775965, -0.003051118729123, 0, False, 0, 0, 0, &selOK);
if (selOK == TRUE)
{
hres = swModel->get_ISelectionManager(&SelectionManager);
hres = SelectionManager->GetSelectedObject6 ( 1, 0, &CurComponent);
}
else
        ::MessageBox(NULL, _T("Error"), _T("Could not select object!"), MB_OK);

IComponent2 Component(CurComponent);
hres = Component->get_Transform2 ( &Xform );
hres = Xform->get_IArrayData ( &TransArray );


Die Funktion GetSelectedObject6() liefert ein LPDISPATCH CurComponent zurück. Auf dieses kann ich aber die Funktion get_Transform2 nicht aufrufen. Ich muss es also irgendwie in ein Component2-Objekt umwandel (oder?). Die Frage ist nur wie?
Die Zeile:

Code:
IComponent2 Component(CurComponent);
habe ich in der API-Hilfe gefunden, aber das funktioniert bei mir nicht.
Außerdem habe ich noch ein kleines Problem mit get_IArrayData. In der Hilfe steht, dass der Rückgabewert double* ist. Ich habe die Matrix ja auch so angelegt, bei Kompilieren erhalte ich dann aber folgende Fehlermeldung:
Zitat:
SldWorks::IMathTransform::get_IArrayData': Konvertierung des Parameters 1 von 'double (*__w64 )[4][4]' in 'double *' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
Was habe ich da falsch gemacht?

Viele Grüße
Anne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

clausb
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von clausb an!   Senden Sie eine Private Message an clausb  Schreiben Sie einen Gästebucheintrag für clausb

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 28. Feb. 2007 18:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für anki 10 Unities + Antwort hilfreich

Vage Idee: Vielleicht hilft's, wenn Du CurComponent als CComPtr anlegst.

  Claus

------------------
CoCreate OneSpace Modeling FAQ: http://www.clausbrod.de/OneSpaceModeling/

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

anki
Mitglied



Sehen Sie sich das Profil von anki an!   Senden Sie eine Private Message an anki  Schreiben Sie einen Gästebucheintrag für anki

Beiträge: 25
Registriert: 26.01.2007

erstellt am: 28. Feb. 2007 18:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Habe ich schon versucht, hat leider auch nicht funktioniert 

Vielen Grüße
Anne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brummbaer
Mitglied
Student / Maschinenbau


Sehen Sie sich das Profil von Brummbaer an!   Senden Sie eine Private Message an Brummbaer  Schreiben Sie einen Gästebucheintrag für Brummbaer

Beiträge: 28
Registriert: 25.11.2004

erstellt am: 02. Mrz. 2007 18:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für anki 10 Unities + Antwort hilfreich

Hallo,

schau Dir in der API-Hilfe dieses Beispiel an: Access Assembly Example (C++ COM). Es zeigt Dir eine mögliche Lösung für Dein erstes Problem.

Ich hatte Dein zweites Problem in ähnlicher Weise, ich habe dann die Safearray-Vorlage von SWXSolidWorks genutzt, Du findest es im folgenden API-Beispiel: Get Spline Points Example (C++ COM).

mfg
Steffen


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Elektroingenieur (m/w/d)
Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in den Technologiebereichen ...
Anzeige ansehenElektrotechnik, Elektronik
anki
Mitglied



Sehen Sie sich das Profil von anki an!   Senden Sie eine Private Message an anki  Schreiben Sie einen Gästebucheintrag für anki

Beiträge: 25
Registriert: 26.01.2007

erstellt am: 05. Mrz. 2007 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


cmd.jpg

 
Hallo Steffen,

vielen Dank für deine Antwort. Das erste Problem hatte sich schon erledigt, aber für das zweite war deine Antwort sehr hilfreich. Es funktioniert jetzt. Aber vielleicht kannst du mir noch bei einem anderen Problem weiter helfen. Ich will mit Hilfe von GetComponents Name und Transform-Matrix von allen Bauteilen einer Datei auslesen. Das Problem ist bei mir die Rückgabe des Arrays, in dem die Objekte der Bauteile enthalten sein sollen. Ich kann irgendwie nur auf das erste Objekt zugreifen und das hat auch noch einen sehr merkwürdigen Namen. Hier ist der Code:

Code:

long CompCount;
IComponent2** Comp;
BSTR CompName;

hres = swAssy->GetComponentCount(TRUE, &CompCount);
std::cout << CompCount << "\n";
if (hres!=S_OK)
  std::cout << "Could not count Components!\n" << "hres: " << hres << "\n";
else
  {
    // Dynamisches Array für Bauteile anlegen
    Comp = new IComponent2*[CompCount];
    //----------------------------- Bauteile ermitteln -----------------------------//
    hres = swAssy->IGetComponents(TRUE, CompCount, Comp);
    if (hres!=S_OK )
      std::cout << "GetComponents failed!\n";
    else
    {
      std::cout << "Got Components!\n";
      // Für jedes Bauteil den Namen und die Transformationsmatrix auslesen und an Client senden
      for (long i = 0; i<CompCount; i=i+1)
      {
        CComPtr<IMathTransform> Xform; //LPMATHTRANSFORM
        hres = Comp[i]->get_Name2(&CompName );
        std::cout << "CompName " << i << ": " << CompName << "\n";
        hres = Comp[i]->get_Transform2(&Xform );
        hres = Xform->get_IArrayData(TransArray );
        std::cout << "TransArray " << i << ": \n";
        for (int zeile=0; zeile<16;zeile=zeile+1)
        {
          std::cout << TransArray[zeile] << " ";
          std::cout << "\n";
        }
      }
    }
}



Und im Anhang findest du ein Bild von der Ausgabe. Ich denke, es ist irgendwie ein Problem mit den Zeigern, aber ich komm einfach nicht dahinter 
Ich hoffe, du oder jemand anderes kann mir weiter helfen.

Viele Grüße
Anne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz