importation d'une DLL C dans un script
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:
Code:
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) |
par exemple, ceci fonctionne
mais pour ce qui est de ma DLL perso, rien à faire !
le code C de la dll:
Code:
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:
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:
Citation:
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'
il y a quelque chose que j'ai pas compris ou quoi? :cry:
merci !