Visual Programm umwandeln



  • Hallo zusammen,

    Ich arbeite normalerweise mit Borland c++ Builder, habe aber jetzt ein beispielprogramm um eine hardware anzusteuern in Visual c++. kann mir jemand helfen das so um zu setzten das ich es platformunabhangig benutzen kann?

    im Projekt wird die header *akf*.h benutzt?

    Das ganze ist eine klasse mit ca. 20 Methoden. Da ich mich mit visual gar nicht auskenne und noch lange nicht den status profi hab was programmierung angeht, wäre es echt nett wenn ihr mir dabei etwas zur hand gehen könntet.

    Hier mal ein link mit dem kompletten projekt.

    Es geht sich um diese Klasse:

    #if !defined(AFX_USBX_H__D9273492_7C5B_4132_9CEA_CD364F0D07E4__INCLUDED_)
    #define AFX_USBX_H__D9273492_7C5B_4132_9CEA_CD364F0D07E4__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
    
    // NOTE: Do not modify the contents of this file.  If this class is regenerated by
    //  Microsoft Visual C++, your modifications will be overwritten.
    
    /////////////////////////////////////////////////////////////////////////////
    // CUsbX wrapper class
    
    class CUsbX : public CWnd
    {
    protected:
    	DECLARE_DYNCREATE(CUsbX)
    public:
    	CLSID const& GetClsid()
    	{
    		static CLSID const clsid
    			= { 0x28dc9b13, 0xf17f, 0x49c7, { 0x9b, 0x95, 0x66, 0xe8, 0x45, 0x8d, 0x39, 0x28 } };
    		return clsid;
    	}
    	virtual BOOL Create(LPCTSTR lpszClassName,
    		LPCTSTR lpszWindowName, DWORD dwStyle,
    		const RECT& rect,
    		CWnd* pParentWnd, UINT nID,
    		CCreateContext* pContext = NULL)
    	{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }
    
        BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
    		const RECT& rect, CWnd* pParentWnd, UINT nID,
    		CFile* pPersist = NULL, BOOL bStorage = FALSE,
    		BSTR bstrLicKey = NULL)
    	{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
    		pPersist, bStorage, bstrLicKey); }
    
    // Attributes
    public:
    
    // Operations
    public:
    	long OpenUSB(long* lWarning);
    	long CloseUSB();
    	long GetNumberOfDevices(short* DeviceNumber);
    	long GetDeviceHandle(short DeviceIndex, short* DeviceHandle);
    	long Write(short DeviceHandle, const VARIANT& Data);
    	long Read(short DeviceHandle, VARIANT* Data);
    	long DetectDevices();
    	long RefreshDevice(short DeviceHandle);
    	long GetErrorFromCode(long lErrorCode, VARIANT* varErrorString);
    	long GetDriverVersion(short* nDriverVersion);
    	long StopCS(short DeviceHandle);
    	long SelectInterface(short DeviceHandle, short InterfaceIndex);
    	long RefreshAllDevices();
    	long StopAllCS();
    	long StartCS(short DeviceHandle, VARIANT* varDeviceResponse);
    	long StartTM(short DeviceHandle, short PulseFrequency, VARIANT* varDeviceResponse);
    	long SuspendStream(short DeviceHandle);
    	long ResumeStream(short DeviceHandle);
    	long StopTM(short DeviceHandle);
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_USBX_H__D9273492_7C5B_4132_9CEA_CD364F0D07E4__INCLUDED_)
    

    Hier die Methoden dazu:

    #include "stdafx.h"
    #include "usbx.h"
    
    /////////////////////////////////////////////////////////////////////////////
    // CUsbX
    
    IMPLEMENT_DYNCREATE(CUsbX, CWnd)
    
    /////////////////////////////////////////////////////////////////////////////
    // CUsbX properties
    
    /////////////////////////////////////////////////////////////////////////////
    // CUsbX operations
    
    long CUsbX::OpenUSB(long* lWarning)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_PI4;
    	InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		lWarning);
    	return result;
    }
    
    long CUsbX::CloseUSB()
    {
    	long result;
    	InvokeHelper(0x2, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
    	return result;
    }
    
    long CUsbX::GetNumberOfDevices(short* DeviceNumber)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_PI2;
    	InvokeHelper(0x3, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceNumber);
    	return result;
    }
    
    long CUsbX::GetDeviceHandle(short DeviceIndex, short* DeviceHandle)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2 VTS_PI2;
    	InvokeHelper(0x4, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceIndex, DeviceHandle);
    	return result;
    }
    
    long CUsbX::Write(short DeviceHandle, const VARIANT& Data)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2 VTS_VARIANT;
    	InvokeHelper(0x5, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle, &Data);
    	return result;
    }
    
    long CUsbX::Read(short DeviceHandle, VARIANT* Data)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2 VTS_PVARIANT;
    	InvokeHelper(0x6, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle, Data);
    	return result;
    }
    
    long CUsbX::DetectDevices()
    {
    	long result;
    	InvokeHelper(0x7, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
    	return result;
    }
    
    long CUsbX::RefreshDevice(short DeviceHandle)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2;
    	InvokeHelper(0x8, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle);
    	return result;
    }
    
    long CUsbX::GetErrorFromCode(long lErrorCode, VARIANT* varErrorString)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I4 VTS_PVARIANT;
    	InvokeHelper(0x9, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		lErrorCode, varErrorString);
    	return result;
    }
    
    long CUsbX::GetDriverVersion(short* nDriverVersion)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_PI2;
    	InvokeHelper(0xa, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		nDriverVersion);
    	return result;
    }
    
    long CUsbX::StopCS(short DeviceHandle)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2;
    	InvokeHelper(0xb, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle);
    	return result;
    }
    
    long CUsbX::SelectInterface(short DeviceHandle, short InterfaceIndex)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2 VTS_I2;
    	InvokeHelper(0xc, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle, InterfaceIndex);
    	return result;
    }
    
    long CUsbX::RefreshAllDevices()
    {
    	long result;
    	InvokeHelper(0xd, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
    	return result;
    }
    
    long CUsbX::StopAllCS()
    {
    	long result;
    	InvokeHelper(0xe, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
    	return result;
    }
    
    long CUsbX::StartCS(short DeviceHandle, VARIANT* varDeviceResponse)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2 VTS_PVARIANT;
    	InvokeHelper(0xf, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle, varDeviceResponse);
    	return result;
    }
    
    long CUsbX::StartTM(short DeviceHandle, short PulseFrequency, VARIANT* varDeviceResponse)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2 VTS_I2 VTS_PVARIANT;
    	InvokeHelper(0x10, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle, PulseFrequency, varDeviceResponse);
    	return result;
    }
    
    long CUsbX::SuspendStream(short DeviceHandle)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2;
    	InvokeHelper(0x12, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle);
    	return result;
    }
    
    long CUsbX::ResumeStream(short DeviceHandle)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2;
    	InvokeHelper(0x13, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle);
    	return result;
    }
    
    long CUsbX::StopTM(short DeviceHandle)
    {
    	long result;
    	static BYTE parms[] =
    		VTS_I2;
    	InvokeHelper(0x14, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    		DeviceHandle);
    	return result;
    }
    

    Ist es überhaupt möglich das um zu setzten??

    Danke schonmal



  • Du müßtest eigentlich nur die MFC-Header rausschmeißen (afx*.h), die windows-header abe drin lassen. Beim Drüberscrollen seh' ich nix, was nicht generell C++ - tauglich ist.



  • Ich würde eher sagen, in diesem Code ist alles MFC-spezifisch.

    Es handelt sich um einen von Visual Studio automatisch generierten Wrapper für ein COM-Objekt, es ist kein handgeschriebener C++-Code. Steht doch auch in den Kommentaren.

    Im C++-Builder gibt es einen Menupunkt "Typbibliothek importieren", damit kann man entsprechendes für die VCL erzeugen.



  • Da die Klasse von CWnd abgeleitet ist, handelt es sich wohl um ein ActiveX-Steuerelement.

    Dann wäre ActiveX Importieren die entsprechende Option beim Borland.

    Und dieser Thread wäre im BCB-Forum besser aufgehoben.



  • sorry, ich hab hier was verwechselt. War wohl am 01.08.2008 nicht 13:15:56 ganz so fit 🤡



  • Hallo, danke für eure Hilfe.

    Mit ActiveX hab ich noch nichts programmiert. Hab dementsprechend wenig Ahnung davon. Bei Borland gibt es ein Com-Objekt was ich einbinden kann, das steht auch unter der Kathegorie ActiveX, das sollte ich aber am besten wirklich mal im Anderen Forum nach fragen.

    Aber wegen dem Problem allgemein hat man mich schon vom Borland Forum zum nach hier geschickt.

    Also damit ich das richtig verstehe: Der gepostete Quelltext ist ein von Visual generierter Text, aber woher weiß Visual welche methoden gebraucht werden!?



  • ActiveX-Controls enthalten normalerweise eine Type Library, in der die verfügbaren Komponenten, Interfaces und Methoden beschrieben sind. (Sowas wie ".NET Reflection für Arme").

    Bei den VC Tools gibt es einen OLE viewer, dort gibt es den Menübefehl "View TypeLib" - da kann man sich eine TypeLib (.tlb) oder ein Control-Dll raussuchen und rumstöbern.


Anmelden zum Antworten