Avatar billede mouse-the-mighty Nybegynder
25. juli 2006 - 15:50 Der er 28 kommentarer og
1 løsning

Brug af InpOut32.dll i VC++

Jeg har hented DLL'en InpOut32.dll fra logix4u.net og brugt den en del i VB uden problemer.
Nu sidder jeg dog og kæmber med hvordan den skal bruges i VC++
Håber all i experter kan hjælpe mig lidt her.
Da jeg ikke er alt for stiv i C++ vil lidt simpel exempel kode og lidt forklarringer være guld værd. :D
Avatar billede arne_v Ekspert
25. juli 2006 - 16:14 #1
Er det en Win32 DLL eller en ActiveX DLL ?

(er det Declare eller CreateObject i VB ?)
Avatar billede mouse-the-mighty Nybegynder
25. juli 2006 - 16:34 #2
i VB er den declared :)
Avatar billede arne_v Ekspert
25. juli 2006 - 16:49 #3
saa skal du bruge LoadLibrary og GetProcAddress
Avatar billede arne_v Ekspert
25. juli 2006 - 16:49 #4
et eksempel fra lageret:

#include <iostream>

using namespace std;

#include <windows.h>

typedef char *(*whoamifunc)();
typedef int (*opfunc)(int x,int y);

void test(char *dllname)
{
  HINSTANCE mydll = LoadLibrary(dllname);
  whoamifunc fncptr1 = (whoamifunc)GetProcAddress(mydll,"whoami");
  cout << fncptr1() << endl;
  opfunc fncptr2 = (opfunc)GetProcAddress(mydll,"op");
  cout << fncptr2(8,2) << endl;
}

int main()
{
  test("a.dll");
  test("b.dll");
  return 0;
}
Avatar billede mouse-the-mighty Nybegynder
25. juli 2006 - 21:03 #5
Kan jeg ikke få dig til til at forklare nærmere hvad du gør på disse to linier
typedef char *(*whoamifunc)();
typedef int (*opfunc)(int x,int y);

De forvirer mig en smule :P
Avatar billede arne_v Ekspert
25. juli 2006 - 21:42 #6
syntaxen er ogsaa gyselig

det er type definitioner af funktions pointere

typedef int (*opfunc)(int x,int y);

betyder at opfunc er en pointer til en funktion som returnerer en int og tager
2 argumenter som begge er int
Avatar billede arne_v Ekspert
26. juli 2006 - 01:39 #7
hvis du giver mig declare'n kan jeg foreslå noget kode
Avatar billede mouse-the-mighty Nybegynder
26. juli 2006 - 02:55 #8
Det vil jeg sætte stor pris på :D
Jeg skal ærligt inrømme at jeg stadig tåger rundt i C++ :)
Men her er hvodan de dele af den jeg bruger i VB ser ud.

Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)

'skriv til porten
Out(&H378, 6)
Avatar billede arne_v Ekspert
26. juli 2006 - 03:01 #9
HINSTANCE mydll = LoadLibrary("inpout32.dll");
Avatar billede arne_v Ekspert
26. juli 2006 - 03:04 #10
typedef short (*oneargfunc)(short a);

...

oneargfunc Inp = (oneargfunc)GetProcAddress(mydll,"Inp32");
Avatar billede arne_v Ekspert
26. juli 2006 - 03:05 #11
typedef void (*twoargsub)(short a1,short a2);

...

twoargsub Out = (twoargsub)GetProcAddress(mydll,"Out32");
Avatar billede arne_v Ekspert
26. juli 2006 - 03:05 #12
utestet - men det er ihvertfald ideen
Avatar billede mouse-the-mighty Nybegynder
26. juli 2006 - 13:59 #13
Ja ja nu vil den squ kopilere :P
men  når jeg kalder Out(HardwarePort, 6); så får jeg denne besked.

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Avatar billede arne_v Ekspert
26. juli 2006 - 14:16 #14
prøv:

typedef WINAPI short (*oneargfunc)(short a);
typedef WINAPI void (*twoargsub)(short a1,short a2);
Avatar billede mouse-the-mighty Nybegynder
26. juli 2006 - 14:47 #15
hm så vil den ikke længere compile... jeg for den her fejl ved hver af dem
error C2059: syntax error : ''<L_TYPE_ambig>''
Avatar billede arne_v Ekspert
26. juli 2006 - 16:03 #16
typedef short WINAPI (*oneargfunc)(short a);
typedef void WINAPI (*twoargsub)(short a1,short a2);
Avatar billede mouse-the-mighty Nybegynder
26. juli 2006 - 19:34 #17
jeg tror jeg bruger den forkert :( for jeg for stadig fejl... denne gang er det
error C2059: syntax error : '('
Avatar billede arne_v Ekspert
26. juli 2006 - 19:56 #18
Har du inkluderet windows.h ?
Avatar billede mouse-the-mighty Nybegynder
26. juli 2006 - 20:33 #19
yup :)
Avatar billede arne_v Ekspert
27. juli 2006 - 01:51 #20
det forstår jeg ikke

følgende compiler hos mig:

#include "windows.h"

typedef short WINAPI (*oneargfunc)(short a);
typedef void WINAPI (*twoargsub)(short a1,short a2);

void dummy()
{
    HINSTANCE mydll = LoadLibrary("inpout32.dll");
    oneargfunc Inp = (oneargfunc)GetProcAddress(mydll,"Inp32");
    twoargsub Out = (twoargsub)GetProcAddress(mydll,"Out32");
    Inp(123);
    Out(123,456);
}
Avatar billede arne_v Ekspert
27. juli 2006 - 01:52 #21
hvordan ser din kode ud ?
Avatar billede mouse-the-mighty Nybegynder
27. juli 2006 - 11:12 #22
Jeg zipper lige hele projektet. Det er hvist nemmest :)
http://fam-soelberg.dk/HCS.zip

Jeg ved ikke om det gør nogen forskel men den er lavet i Visual studio 2003
Avatar billede arne_v Ekspert
28. juli 2006 - 04:01 #23
HINSTANCE MyDll = LoadLibrary("inpout32.dll");
oneargfunc Inp32 = (oneargfunc)GetProcAddress(MyDll,"Inp32");
twoargsub Out = (twoargsub)GetProcAddress(MyDll,"Out32");

skal være inden i en funktion
Avatar billede arne_v Ekspert
28. juli 2006 - 04:02 #24
men iøvrigt er alt det he roverflødigt

du har inpout.h og inpout.lib

så hvis du laver en

#include "inpout.h"

i din kode og sætter VC++ op til at link emod inpout.lib, så bør det bare
virke
Avatar billede mouse-the-mighty Nybegynder
28. juli 2006 - 10:51 #25
hvordan foretager man sådanne et link?
Avatar billede arne_v Ekspert
28. juli 2006 - 13:29 #26
et eller andet sted inde i menu systemet - "build options" "link options" eller
noget lignende
Avatar billede arne_v Ekspert
11. september 2006 - 23:51 #27
OK ?
Avatar billede mouse-the-mighty Nybegynder
12. september 2006 - 16:16 #28
Du må undskylde den lange ventetid.. det var ikke min mening at lade dig "hænge" men jeg tog på ferie dangen efter sidste post og der har været sådan et drøn på arbejde efter jeg kom tilbage at jeg ikke har haft tid til at overskuge private projekter.

Jeg gi'r dig naturnigvis point for alt din hjælp :) jeg håber det er iorden hvis jeg vender tilbage med flere spørgsmål når endgang jeg for lidt bedre tid igen :)
Avatar billede arne_v Ekspert
12. september 2006 - 20:28 #29
selvfølgelig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester