Seite 1 von 1

64Bit-DLL und USB-HOME

Verfasst: Mittwoch 31. Mai 2017, 12:42
von FrankCS
Hallo zusammen,

wir benutzen hier eine USB-Leiste und haben diese bisher in einer 32Bit-Applikation benutzt.
Mit der 64-Bit-Version klappt das nicht mehr da die bereit gestellte DLL nur 32Bit ist.
Gibt es da was?

Weitere Info:
Zugriff über CoCreateInstance -> COM-Objekt

OS: Win7 64Bit Pro

Grüße und Danke schon mal im Voraus,

Frank

Re: 64Bit-DLL und USB-HOME

Verfasst: Mittwoch 31. Mai 2017, 14:30
von andy
Hallo,

Visual Basic 64-bit gibt es glaube ich nicht. Sorry.

LG Andy

Re: 64Bit-DLL und USB-HOME

Verfasst: Mittwoch 31. Mai 2017, 16:34
von FrankCS
Hallo Andy,

Danke für die schnelle Reaktion.
Die DLL ist in VB geschrieben?
Wir benutzen C++ um auf die DLL zuzugreifen.

Code: Alles auswählen


class CAnelUSBCtrl : public COleDispatchDriver
{
	// Operationen
public:
	short get_DevCount()
	{
		short result;
		InvokeHelper(0x68030000, DISPATCH_PROPERTYGET, VT_I2, (void*)&result, NULL);
		return result;
	}
	CString DevName(short * Device)
	{
		CString result;
		static BYTE parms[] = VTS_PI2 ;
		InvokeHelper(0x60030001, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, Device);
		return result;
	}
	short DevType(short * Device)
	{
		short result;
		static BYTE parms[] = VTS_PI2 ;
		InvokeHelper(0x60030002, DISPATCH_METHOD, VT_I2, (void*)&result, parms, Device);
		return result;
	}
	BOOL DevSel(short * Device)
	{
		BOOL result;
		static BYTE parms[] = VTS_PI2 ;
		InvokeHelper(0x60030003, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Device);
		return result;
	}
	short DevState(short * Device)
	{
		short result;
		static BYTE parms[] = VTS_PI2 ;
		InvokeHelper(0x60030004, DISPATCH_METHOD, VT_I2, (void*)&result, parms, Device);
		return result;
	}
	short SwOn(short * Device, short * Segment)
	{
		short result;
		static BYTE parms[] = VTS_PI2 VTS_PI2 ;
		InvokeHelper(0x60030005, DISPATCH_METHOD, VT_I2, (void*)&result, parms, Device, Segment);
		return result;
	}
	short SwOff(short * Device, short * Segment)
	{
		short result;
		static BYTE parms[] = VTS_PI2 VTS_PI2 ;
		InvokeHelper(0x60030006, DISPATCH_METHOD, VT_I2, (void*)&result, parms, Device, Segment);
		return result;
	}
	void Init()
	{
		InvokeHelper(0x60030007, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
	}
};

// Hier kommt der Code zum ein/aus-schalten
		CLSID const clsid
			= { 0xA1EBE7D0, 0x3EBD, 0x438A, { 0xA4, 0xDC, 0xC9, 0x97, 0xDB, 0x7A, 0xE, 0xFE } };

		IID iid 
			= { 0x475411FA, 0x5189, 0x405D, { 0x98, 0x92, 0x16, 0x79, 0xCF, 0x5C, 0x18, 0xCB } };

		LPVOID iface = NULL;

		HRESULT hr = CoCreateInstance(clsid,
			NULL,
			CLSCTX_INPROC_SERVER,
			iid,
			&iface);

		if(hr!=S_OK)
		{
			SRESV("Unable to instantiate COM object. Is the control installed and registered?");
			break;
		}

		CAnelUSBCtrl ctl;
		ctl.AttachDispatch((LPDISPATCH) iface);

		ctl.Init();
		short dev = 0, seg = slot;
		short res = 0;
		if(on)
		{
			res = ctl.SwOn(&dev,&seg);
		}
		else
		{
			res = ctl.SwOff(&dev,&seg);
		}

		ctl.DetachDispatch();
		((IUnknown*)iface)->Release();		
Grüße,

Frank

Re: 64Bit-DLL und USB-HOME

Verfasst: Donnerstag 1. Juni 2017, 04:55
von andy
Morgen Frank,

Man kann doch x86 Programme auf Windows 64 laufen lassen.

LG Andy