Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Vorschau-Bitmap extrahieren... diesmal x64

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
  
Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen
Autor Thema:  API: Vorschau-Bitmap extrahieren... diesmal x64 (2260 mal gelesen)
ChrisB
Mitglied



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

Beiträge: 61
Registriert: 14.03.2005

SolidWorks 2006/2008
WinXP Pro
MS VS 2005

erstellt am: 11. Aug. 2008 15: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

Hallo Leute!

Bisher verwende ich die gute alte SldWorks_ExtractBitmap Bibliothek um mir die Vorschau-Bildchen aus SolidWorks Dateien zu holen. Nun hab ich leider das Problem, dass meine Tools auch auf 64-bit Rechnern laufen sollen, und da fängt es an zu haken.

Dank .NET Framework laufen meine Tools an sich wunderbar auch auf x64. Aber ein Problem hab ich: Ich kann keine "vorkompilierten" 32-bit DLL-Dateien (wie eben diese Bibliothek) in meinen Programmen laden.

Nun meine Frage: Habt ihr ähnliche Probleme? Und wenn ja: wie habt ihr die gelöst?

Bin mal gespannt 

Grüße
Christian

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 11. Aug. 2008 15:49    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 ChrisB 10 Unities + Antwort hilfreich

Hallo Christian,

das Extrahieren der Previewbitmaps wird mittlerweile mit dem jetzt auch dokumentierten und offiziell unterstützten SolidWorks Document Manager gemacht, ist alles im API Hilfefile beschrieben inkl. einem Beispiel um das Vorschaubild als PNG zu extrahieren.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

ChrisB
Mitglied



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

Beiträge: 61
Registriert: 14.03.2005

SolidWorks 2006/2008
WinXP Pro
MS VS 2005

erstellt am: 11. Aug. 2008 16:16    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

Hi Stefan!

Auf den DocumentMgr umzusteigen war eigentlich meine erste Idee. Aber leider läuft meine Anwendung out-of-process, so dass das ganze nicht funktioniert 

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 11. Aug. 2008 16:25    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 ChrisB 10 Unities + Antwort hilfreich

Kein Problem, du kannst den SwDocumentMgr.dll auch von einer externen Echse schlucken lassen und darfst die DLL mit deiner Anwendung packen und weitergeben. Du brauchst nur einen eigenen Schlüssel, der dir von den SolidWorks API Leuten zugeschickt wird. Mailadresse steht auch in der Hilfedatei.

Wie sich das ganze allerdings auf 64 Bit Systemen verhält kann ich mangels eigenem Rechner zum Testen nicht sagen, aber ich geh mal davon aus, dass es diese DLL auch in 64 Bit gibt, wäre ja nur logisch.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

ChrisB
Mitglied



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

Beiträge: 61
Registriert: 14.03.2005

SolidWorks 2006/2008
WinXP Pro
MS VS 2005

erstellt am: 12. Aug. 2008 08:21    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

Moin!

Das Schlucken ist kein Problem. Ich kann die DLL auch auf 64-bit Rechnern problemlos ansprechen, einbinden und instanzieren.
Der Aufruf von
pBitmap = SwDMConfiguration7.GetPreviewPNGBitmap ( result)
liefert allerdings immer "nothing" zurück (mit Fehler 2). Alles andere, wie Konfig-Namen anzeigen etc. funktioniert einwandfrei...

Zuerst dachte ich, dass es daran liegt:

Remarks

This method does not work in out-of-process and in some ASP.NET/IIS web applications.

Allerdings muss ich dazu sagen dass nicht einmal das Beispiel-Makro, das in der API dabei ist, jemals funktioniert hat und mir das Bild geliefert hat.
Ich bin mittleweile ziemlich ratlos. Es bleibt immernoch der workaround die Anwendung als x32 zu kompilieren und gute alte DLL weiterhin zu verwenden, auch wenn das absolut unbefriedigend ist...

Trotzdem Danke für die Hilfe!

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

mkkk
Mitglied



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

Beiträge: 105
Registriert: 04.03.2005

erstellt am: 12. Aug. 2008 08:23    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 ChrisB 10 Unities + Antwort hilfreich

...oder Du nimmst den Umweg über eine von SolidWorks erzeugte Bitmap-Datei: SldWorks::GetPreviewBitmapFile

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

ChrisB
Mitglied



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

Beiträge: 61
Registriert: 14.03.2005

SolidWorks 2006/2008
WinXP Pro
MS VS 2005

erstellt am: 12. Aug. 2008 08:29    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

Moin mkkk!

An sich eine gute Idee! Die Sache hat nur einen Haken: es funktioniert nicht, weil mein Programm zwingend als .EXE laufen muss. Aber die "Remarks" bei dieser API sind sehr informativ und erklären auch, warum der swDocumentMgr nur "in-process" das Bild liefern kann:

Remarks

NOTE: Currently, only in-process applications (that is, macros or add-ins) can use this method; out-of-process applications (that is, executables) will get an automation error because the IPictureDisp interface cannot be marshalled across process boundaries. This is a Microsoft behaviour by design. See the Microsoft Knowledge Base for details.

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 12. Aug. 2008 10:21    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 ChrisB 10 Unities + Antwort hilfreich

Hallo Chris,

brauchst du denn die konfigurationsspezifische Vorschau? Ich nutz in meinem PAC4SWX die SwDMDocument10::GetPreviewBitmap, das funktioniert einwandfrei mit dem standalone Programm. Wenn ich Gelegenheit habe schau ich mal wie es mit den konfigurationsspezifischen Bildern ist, wenn es out-of-process nicht klappt hat es nicht smit 32 oder 64 Bit zu tun, sondern dürfte auch auf "normalem" Windows XP nicht funktionieren.

Auf der anderen Seite hat die SwDMDocument10::GetPreviewBitmap ja auch dieser Remark dabei und es klappt trotzdem ...

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

ChrisB
Mitglied



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

Beiträge: 61
Registriert: 14.03.2005

SolidWorks 2006/2008
WinXP Pro
MS VS 2005

erstellt am: 12. Aug. 2008 13:32    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

Ha! Ich hatte noch die 2007er Version der swDocumentMgr.dll. Da gab es noch kein Document10 und daher auch nicht diese Methode der Bitmap-Gewinnung. Danke schonmal für den Tip! Denn die konfigurationsspezifische Vorschau interessiert mich (vorerst) nicht.

Allerdings hat sich mein Problem nicht wirklich geändert. Dafür ist es jetzt interessanter 

Wenn ich nämlich nun auf einem 64-bit Rechner das ganze starte passiert folgendes:

Code:
Dim swDoc As SwDMDocument
Dim swDoc6 as SwDMDocument6
Dim swDoc7 as SwDMDocument7
Dim swDoc8 as SwDMDocument8

swDoc = myDocMgr.GetDocument(FileName, docType, True, Result)
swDoc6 = swDoc    'OK
swDoc7 = swDoc    'OK
swDoc8 = swDoc    'Fehler!



Fehlermeldung:
Unable to cast COM object of type 'System.__ComObject' to interface type 'SwDocumentMgr.SwDMDocument10'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{5C23AE78-4008-46C9-AABB-03D29889BE77}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

Es ist interessant zu sehen dass das Casten bis SwDMDocument7 problemlos funktioniert. Meine erste Vermutung war, dass ich auf dem Remote-PC eine alte DLL installiert hatte. Das konnte ich allerdings ausschließen.

Wie gesagt, das Problem tritt nur auf 64-bit Rechnern auf, und nur dann, wenn ich meine Application nicht explizit für 32-bit kompiliere.

Darf ich dich fragen wie du das bei PAC4SWX gelöst hast? Da funktionierts nämlich. (ich vermute das Programm wird für x86 kompiliert)

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 12. Aug. 2008 14:16    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 ChrisB 10 Unities + Antwort hilfreich

Hallo Chris,

puh, gut zu hören, dass PAC4SWX auf den 64 Bit Büchsen läuft, wie gesagt, ich hab keine zum Testen im Moment ...

Nachdem ich herausgefunden hatte (durch Try and Error) dass die Nummern im Gegensatz zu "normalem" SolidWorks keine Upgrades sind (d.h., ob ich ModelDoc oder ModelDoc2 sag ist wurscht, aber nicht ob ich SwDMDocument7 oder SwDMDocument10 nutze) hab ich die "kleineren" nie probiert sondern direkt die 10 genommen:

Code:
    Dim swClassFact            As SwDocumentMgr.SwDMClassFactory
    Dim swDocMgr                As SwDocumentMgr.SwDMApplication
    Dim swDoc                  As SwDocumentMgr.SwDMDocument10
    Dim pPreview                As IPictureDisp

    [...]

    Set swDoc = swDocMgr.GetDocument(sldFilename, SWXTypeOfFile(sldFilename), False, nRetVal)
    ' das Bild holen
    If Not swDoc Is Nothing Then
       
        Set pPreview = swDoc.GetPreviewBitmap(nRetVal)
   
[...]



Das ganze ist in VB6 geschrieben und ohne Kompilieroptionen erstellt. Mitliefern tue ich die SW2008 SP3.0 SwDocumentMgr.dll

Wie gesagt, was und wo das bei .NET oder 64 Bit noch verborgene Problemchen schlummern weiß ich nicht, bisher konnte ich mich noch nicht aufraffen, meine VB-Projekte in .NET neu zu schreiben.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

ChrisB
Mitglied



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

Beiträge: 61
Registriert: 14.03.2005

SolidWorks 2006/2008
WinXP Pro
MS VS 2005

erstellt am: 14. Aug. 2008 08:56    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

Sooo, da bin ich wieder. Ich hab mittlerweile alle Probleme (und davon gabs einige) in den Griff bekommen.
Nun hab ein schönes Control, dass asynchron die Vorschau lädt ohne auf SWXSolidWorks zuzugreifen und sowohl mit 32 als auch 64 bit applications läuft.

Damit nicht jeder das Rad neu erfinden muss, sag ich kurz was zu den Problemchen:

- Der Befehl swDoc11.GetPreviewBitmapBytes(BitmapResult) arbeitet unterschiedlich für 32- und die 64-bit Version der swDocumentMgr.dll

Zumindest bei mir ist es so, dass die 32-bit Version eine 32-bit (8 bit für je R,G,B,A) Bitmap zurückgibt, während die 64-bit Version lediglich eine 24-bit (R,G,B) Bitmap liefert.

In dem Byte-Feld, das von diesem Befehl geliefert wird, ist ein Fehler, der bewirkt dass der Header der Bitmap größer angezeigt wird, als das gesamte Byte-Feld eigentlich lang ist (das Byte 13 ist fälschlicherweise NICHT 0). Wenn man dieses Byte von Hand auf 0 setzt, lässt sich die Bitmap problemlos erzeugen. (Um das rauszufunden war ganz schön viel Knobelei notwendig...)

Mögen diese Infos dem Nächsten, der sich damit rumplagt, helfen.

Grüße
Chris

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

gegy3
Mitglied



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

Beiträge: 300
Registriert: 26.04.2006

SolidWorks 2012 SP 5.0

erstellt am: 10. Aug. 2009 19:59    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 ChrisB 10 Unities + Antwort hilfreich

Also es gibt keine Möglichkeit mit getPNGPreview = document.GetPreviewBitmap(result1) in einer exe datei und vb.net ein Preview zu bekommen?
Ich bekomm auch immer nur nothing zurück.

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