Verfasst: 24.02.2006 20:12
Ok,
File CreateObject.pb
File ADUSB.pb
Bei mir Funktioniert er auch nicht. Invalid memory access
File CreateObject.pb
Code: Alles auswählen
Enumeration
#CLSCTX_INPROC_SERVER = 1
#CLSCTX_INPROC_HANDLER = 2
#CLSCTX_LOCAL_SERVER = 4
#CLSCTX_REMOTE_SERVER = 16
#CLSCTX_SERVER = (#CLSCTX_INPROC_SERVER | #CLSCTX_LOCAL_SERVER | #CLSCTX_REMOTE_SERVER)
EndEnumeration
Structure TYPEATTR
guid.GUID
lcid.l
dwReserved.l
memidConstructor.l
memidDestructor.l
lpstrSchema.l
cbSizeInstance.l
typekind.l
cFuncs.w
cVars.w
cImplTypes.w
cbSizeVft.w
cbAlignment.w
wTypeFlags.w
wMajorVerNum.w
wMinorVerNum.w
tdescAlias.l
idldescType.l
EndStructure
Global LastMessage.s
Global LastError.l
ProcedureDLL.s Uni2Ansi(unicodestr.l) ; Converts Unicode to normal (Ansi) string
lenA = WideCharToMultiByte_(#CP_ACP, 0, unicodestr, -1, 0, 0, 0, 0);
ansistr.s = Space(lenA)
If (lenA > 0)
WideCharToMultiByte_(#CP_ACP, 0, unicodestr, -1, @ansistr, lenA, 0, 0);
EndIf
ProcedureReturn ansistr
EndProcedure
ProcedureDLL.l Ansi2Uni(ansistr.s) ; Converts normal (Ansi) string to Unicode
lenA.l = Len(ansistr)
lenW = MultiByteToWideChar_(#CP_ACP, 0, ansistr, lenA, 0, 0)
If (lenW > 0) ; Check whether conversion was successful
unicodestr = SysAllocStringLen_(0, lenW)
MultiByteToWideChar_(#CP_ACP, 0, ansistr, lenA, unicodestr, lenW)
result = unicodestr
ProcedureReturn result
Else
ProcedureReturn 0
EndIf
EndProcedure
ProcedureDLL.l CreateObject(ProgID.s) ; Creates COM object from ProgID
err.l = CLSIDFromProgID_(Ansi2Uni(ProgID), @CLSID.GUID)
If err <> #S_OK
LastMessage = "Error: CLSIDFromProgID. Errorcode: " + Hex(err)
LastError = err
ProcedureReturn 0
EndIf
err.l = CoCreateInstance_(CLSID,0,#CLSCTX_SERVER,?IID_IDispatch,@oDispatch.IDispatch)
If err <> #S_OK
LastMessage = "Error: CoCreateInstance. Errorcode: " + Hex(err)
LastError = err
ProcedureReturn 0
EndIf
If oDispatch\GetTypeInfo(0,lcid,@oDispTypeInfo.ITypeInfo) = #S_OK
If oDispTypeInfo\GetTypeAttr(@aTypeAttributes.l) = #S_OK
*oTypeAttributes.TYPEATTR=aTypeAttributes
IID_OBJECT = *oTypeAttributes\guid
oDispTypeInfo\ReleaseTypeAttr(aTypeAttributes)
EndIf
oDispTypeInfo\Release()
EndIf
err.l = oDispatch\QueryInterface(IID_OBJECT,@object.l)
If err <> #S_OK
oDispatch\Release()
LastMessage = "Error: QueryInterface. Errorcode: " + Hex(err)
LastError = err
ProcedureReturn 0
EndIf
oDispatch\Release()
LastMessage = "CreateObject:" + ProgID
LastError = err
ProcedureReturn object
EndProcedure
ProcedureDLL ReleaseObject(object.l) ; Releases Object from memory
*object.IUnknown = object
*object\Release()
EndProcedure
ProcedureDLL COMLIB_Init()
CoInitialize_(#Null)
EndProcedure
ProcedureDLL COMLIB_End()
CoUninitialize_()
EndProcedure
DataSection
IID_IDispatch:
Data.l $00020400
Data.w $0000, $0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
EndDataSection
DataSection
IID_IUnknown:
Data.l $00000000
Data.w $0000, $0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
EndDataSection
Code: Alles auswählen
IncludeFile "CreateObject.pb"
Interface AD_USB2XX Extends IDispatch
Scan(DeviceNr.w); boolean (Long)
AnalogVoltage(DeviceNr.w, Channel.w); Double
AnalogVoltage2(DeviceNr.w, Channel.w, rhs.double); Void
DigIO(DeviceNr.w); short
DigIO2(DeviceNr.w, rhs.w); void
GetAnalogDiffVoltage(DeviceNr.w,Channel.w); Double
GetDeviceType(DeviceNr.w); short
GetError(DeviceNr.w); short
GetSerialNr(DeviceNr.w); short
AnalogIO(DeviceNr.w, Channel.w); long
AnalogIO2(DeviceNr.w, Channel.w, rhs.l); void
EnableCalibration(*Password); BSTR Unicode ;
Calibration(DeviceNr.w, IO.w, Level.w, Channel.w); long
Calibration2(DeviceNr.w, IO.w, Level.w, Channel.w, rhs.l); void
SerialNr(DeviceNr.w); short
SerialNr2(DeviceNr.w, rhs.w); void
ReadAnalogVoltage(DeviceNr.w, Channel.w); double
WriteAnalogVoltage(DeviceNr.w, Channel.w, Voltage.double); void
ReadDigIn(DeviceNr.w); short
WriteDigOut(DeviceNr.w, Value.w); void
DataIO(DeviceNr.w); void
Close(); void
EndInterface
COMLIB_Init()
*Object.AD_USB2XX = CreateObject("ADUSB2XX.ADUSB2XXCtrl.1")
r1 = *Object\Scan(0)
ReleaseObject(*Object)
COMLIB_End()