Bonjour à tous
je me met rapidement au ruby parce que j'ai besoin d'avoir un plugin pour sketchup opérationnel dans 5 jours
pour résumer rapidement, j'ai besoin de synchroniser mon sketchup par le réseau. Pour la communication réseau, je dois passer par une dll faite maison (impossible de contourner cette contrainte), écrite en C
J'ai donc besoin d'importer ma DLL dans mon script ruby pour lui envoyer le nécessaire.
j'ai terminé le script, j'ai écrit la dll, tout va bien. Mais je sèche un peu pour l'importation de la dll.
- aprés moultes recherches, j'ai fini par comprendre qu'il me fallait importer le fichier win32api.so dans le répertoire de sketchup. C'est chose faite
- en utilisant winapi32, j'arrive à faire des appels sur les dll standards de windows:
par exemple, ceci fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 getDesktopWindow = Win32API.new("user32", "GetDesktopWindow", [], 'L') getActiveWindow = Win32API.new("user32", "GetActiveWindow", [], 'L') sendMessage = Win32API.new("user32", "SendMessage", ['L'] * 4, 'L') sendMessage.Call(getDesktopWindow.Call, 274, 0xf140, 0)
mais pour ce qui est de ma DLL perso, rien à faire !
le code C de la dll:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 extern "C" __declspec(dllexport) int helloWorld(int i) { i=0; i+=50; return i; }
le code ruby:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 require 'sketchup.rb' require 'extensions.rb' require 'utilities.rb' require 'Win32API' def helloruby UI.messagebox('on va faire des tests, trop cool !') dllcalc=Win32API.new("wpf2dai.dll","helloWorld",['I'],'I') end if( not file_loaded?("persoTest.rb") ) UI.menu("PlugIns").add_item("Perso") { helloruby } end file_loaded("persoTest.rb")
à l'exécution, ça m'affiche bien la fenêtre de message, puis la console me donne:
il y a quelque chose que j'ai pas compris ou quoi?Error: #<RuntimeError: LoadLibrary: wpf2dai.dll
>
C:/Program Files/Google/Google SketchUp 7/Plugins/persoTest.rb:9:in `initialize'
C:/Program Files/Google/Google SketchUp 7/Plugins/persoTest.rb:9:in `new'
C:/Program Files/Google/Google SketchUp 7/Plugins/persoTest.rb:9:in `helloruby'
C:/Program Files/Google/Google SketchUp 7/Plugins/persoTest.rb:13
C:/Program Files/Google/Google SketchUp 7/Plugins/persoTest.rb:13:in `call'
merci !
Partager