You need Win32::API.
Regards
Mark
Paul Rogers wrote:
> While I've worked plenty in perl I've never had to connect to/use a DLL.
> GoldMine's API uses a DLL. While of course they have plenty of docs for VB
> and C++, they have none for perl.
>
> Below is their VB declarations file. How can I convert this to perl and
> then get access to the DLL's core functions & methods?
>
> Cheers,
> Paul ---
>
> VB declarations file...
>
> Attribute VB_Name = "GM6S32Main"
> ' ***************************************************************
> ' *
> ' * Module Name : GMDeclare
> ' * Purpose : VB declarations for gm6s32.dll functions
> ' * Author : Calvin Luttrell, Nelson Fernandez
> ' * Revised : George Hayes
> ' * Created : 06/15/1999
> ' * Updated : 10/27/1999
> ' * Updated : 11/4/2000
> ' ****************************************************************
> Option Explicit
>
> 'licensing structure passed to GMW_GetLicenseInfo
> Public Type GMW_LicInfo
> Licensee As String * 60 'licensee name
> LicNo As String * 20 'master serial number
> SiteName As String * 20 'undocked site name
> LicUsers As Long 'licensed users
> SQLUsers As Long 'licensed SQL users
> GSSites As Long 'licensed GoldSync sites
> IsDemo As Long 'is demo install
> IsServerLic As Long 'is primary license ('D' or 'E')
> IsRemoteLic As Long 'is remote license ('U' or 'S')
> ISUSALic As Long 'is USA license (1=US,128/32 bit,
> 0=nonUS, 32-bit only)
> iDLLVersion As Long 'the DLL version (400822)
> iReserved1 As Long
> iReserved2 As Long
> sReserved As String * 100
> End Type
>
> Public Type GMWStr 'LPSTR return value from API calls
> Ptr As Long 'Use GMString(GMWStr) to obtain the string
> data
> End Type
>
> 'DLL intialization functions
> Public Declare Function GMW_LoadBDE Lib "gm6s32.dll" (ByVal strSysDir As
> String, _
> ByVal strGoldDir As
> String, _
> ByVal strCommonDir As
> String, _
> ByVal strUser As
> String, _
> ByVal strPassword As
> String) As Long
>
> Public Declare Function GMW_UnloadBDE Lib "gm6s32.dll" () As Long
>
> Public Declare Function GMW_Login Lib "gm6s32.dll" (ByVal strUser As String,
> _
> ByVal strPassword As
> String, _
> Optional ByVal
> strSQLUser As String, _
> Optional ByVal
> strSQLPassword As String) As Long
>
> Public Declare Function GMW_Logout Lib "gm6s32.dll" () As Long
>
> Public Declare Function GMW_MULogin Lib "gm6s32.dll" (ByVal strUser As
> String, _
> ByVal strPassword As
> String, _
> ByVal strSQLUser As
> String, _
> ByVal strSQLPassword
> As String, _
> ByVal strCommonDir As
> String) As Long
>
> Public Declare Function GMW_MULogout Lib "gm6s32.dll" (ByVal nSessionID As
> Long) As Long
>
> Public Declare Function GMW_MUBeginSession Lib "gm6s32.dll" (ByVal
> nSessionID As Long) As Long
>
> Public Declare Function GMW_SetSQLUserPass Lib "gm6s32.dll" (ByVal
> strUserName As String, _
> ByVal
> strPassword As String) As Long
>
> Public Declare Function GMW_GetLicenseInfo Lib "gm6s32.dll" (LicInfo As
> GMW_LicInfo) As Long
>
>
> ' Datastream functions
> Public Declare Function GMW_DS_Query Lib "gm6s32.dll" (ByVal strSQL As
> String, _
> ByVal strFilter As
> String, _
> ByVal strFDlm As
> String, _
> ByVal strRDlm As
> String) As Long
>
> Public Declare Function GMW_DS_Range Lib "gm6s32.dll" (ByVal strTable As
> String, _
> ByVal strTag As
> String, _
> ByVal strTopLimit As
> String, _
> ByVal strBotLimit As
> String, _
> ByVal strFields As
> String, _
> ByVal strFilter As
> String, _
> ByVal strFDlm As
> String, _
> ByVal strRDlm As
> String) As Long
>
> Public Declare Function GMW_DS_Fetch Lib "gm6s32.dll" (ByVal iHandle As
> Long, _
> ByVal strbuf As
> String, _
> ByVal iBufSize As
> Long, _
> ByVal nGetRecs As
> Long) As Long
>
> Public Declare Function GMW_DS_Close Lib "gm6s32.dll" (ByVal iHandle As
> Long) As Long
>
> 'DataStream SQL query & fetch wrapper
> Public Declare Function GMW_SQLStream Lib "gm6s32.dll" (ByVal szSQL As
> String, _
> ByVal szFilter As
> String, _
> ByVal nStartRec As
> Long, _
> ByVal nGetRecs As
> Long, _
> ByVal szBuf As
> String, _
> ByVal iBufSize As
> Long, _
> ByVal szFDlm As
> String, _
> ByVal szRDlm As
> String) As Long
>
> 'DBF workarea functions
> Public Declare Function GMW_DB_Open Lib "gm6s32.dll" (ByVal strTableName As
> String) As Long
>
> Public Declare Function GMW_DB_Close Lib "gm6s32.dll" (ByVal lArea As Long)
> As Long
>
> Public Declare Function GMW_DB_Append Lib "gm6s32.dll" (ByVal lArea As Long,
> _
> ByVal strRecID As
> String) As Long
>
> Public Declare Function GMW_DB_Replace Lib "gm6s32.dll" (ByVal lArea As
> Long, _
> ByVal strField As
> String, _
> ByVal strData As
> String, _
> ByVal iAddTo As
> Long) As Long
>
> Public Declare Function GMW_DB_Delete Lib "gm6s32.dll" (ByVal lArea As Long)
> As Long
>
> Public Declare Function GMW_DB_Unlock Lib "gm6s32.dll" (ByVal lArea As Long)
> As Long
>
> Public Declare Function GMW_DB_Read Lib "gm6s32.dll" (ByVal lArea As Long, _
> ByVal strField As
> String, _
> ByVal strbuf As
> String, _
> ByVal lBufSize As
> Long) As Long
>
> Public Declare Function GMW_DB_Top Lib "gm6s32.dll" (ByVal lArea As Long) As
> Long
>
> Public Declare Function GMW_DB_Bottom Lib "gm6s32.dll" (ByVal lArea As Long)
> As Long
>
> Public Declare Function GMW_DB_SetOrder Lib "gm6s32.dll" (ByVal lArea As
> Long, _
> ByVal strTag As
> String) As Long
>
> Public Declare Function GMW_DB_Seek Lib "gm6s32.dll" (ByVal lArea As Long, _
> ByVal strParam As
> String) As Long
>
> Public Declare Function GMW_DB_Skip Lib "gm6s32.dll" (ByVal lArea As Long, _
> ByVal lSkip As Long)
> As Long
>
> Public Declare Function GMW_DB_Goto Lib "gm6s32.dll" (ByVal lArea As Long, _
> ByVal strRecNo As
> String) As Long
>
> Public Declare Function GMW_DB_Move Lib "gm6s32.dll" (ByVal lArea As Long, _
> ByVal strCommand As
> String, _
> ByVal strParam As
> String) As Long
>
> Public Declare Function GMW_DB_Search Lib "gm6s32.dll" (ByVal lArea As Long,
> _
> ByVal strExpr As
> String, _
> ByVal strRecID As
> String) As Long
>
> Public Declare Function GMW_DB_Filter Lib "gm6s32.dll" (ByVal lArea As Long,
> _
> ByVal strFilterExpr
> As String) As Long
>
> Public Declare Function GMW_DB_Range Lib "gm6s32.dll" (ByVal lArea As Long,
> _
> ByVal strMin As
> String, _
> ByVal strMax As
> String, _
> ByVal strTag As
> String) As Long
>
> Public Declare Function GMW_DB_RecNo Lib "gm6s32.dll" (ByVal lArea As Long,
> _
> ByVal strRecID As
> String) As Long
>
> Public Declare Function GMW_DB_IsSQL Lib "gm6s32.dll" (ByVal lArea As Long)
> As Long
>
> 'Quick one-field access functions (these are slow -- do not use in loops)
> Public Declare Function GMW_DB_QuickSeek Lib "gm6s32.dll" (ByVal
> strTableName As String, _
> ByVal strIndex As
> String, _
> ByVal
> strSeekValue As String, _
> ByVal strRecID As
> String) As Long
>
> Public Declare Function GMW_DB_QuickRead Lib "gm6s32.dll" (ByVal
> strTableName As String, _
> ByVal strRecID As
> String, _
> ByVal strField As
> String, _
> ByVal strValue As
> String, _
> ByVal iLen As
> Long) As Long
>
> Public Declare Function GMW_DB_QuickReplace Lib "gm6s32.dll" (ByVal
> strTableName As String, _
> ByVal strRecID
> As String, _
> ByVal strField
> As String, _
> ByVal strValue
> As String, _
> ByVal iAddTo
> As Integer) As Long
>
> 'Sync functions
> Public Declare Function GMW_SyncStamp Lib "gm6s32.dll" (ByVal strStamp As
> String, _
> ByVal strOutBuf As
> String) As Long
>
> Public Declare Function GMW_UpdateSyncLog Lib "gm6s32.dll" (ByVal strTable
> As String, _
> ByVal strRecID
> As String, _
> ByVal strField
> As String, _
> ByVal strAction
> As String) As Long
>
> Public Declare Function GMW_ReadImpTLog Lib "gm6s32.dll" (ByVal strFile As
> String, _
> ByVal lDelWhenDone
> As Long, _
> ByVal strStatus As
> String) As Long
>
> Public Declare Function GMW_NewRecID Lib "gm6s32.dll" (ByVal strRecID As
> String, _
> ByVal strUser As
> String) As GMWStr
>
>
> 'WinAPI
> Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As
> Any, Src As Any, ByVal Length As Long)
> Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal
> gmstrptr As Long) As Long
>
>
> '*********************************************************************************
> '* Copyright (c) 1999 GoldMine Software Corporation '* '* Version
> 1.0: April 14, 1999 '* Programmer : David Yanai '* VB Revision:
> George Hayes '* Revised: November 5, 2000 '* '* Purpose: '*
> Visual Basic interface for GoldMine name value container '* '*
> Example: '* '* Sub displayField(hgmnv as Long, strFldName as String) '*
> dim strDefault as string, strValue as string, count as long, i aslong '* '*
> count = GMW_NV_GetMultiValueCount(hgmnv, strFldName) '* If count <= 0
> Then exit sub '* '* strValue = GMString(GMW_NV_GetValue(hgmnv,
> strFldName, strDefault)) '* debug.print strFldName, strValue '* '*
> For i = 2 to count '* strValue = GMString(GMW_NV_GetMultiValue(hgmnv,
> strFldName, i,strDefault)) '* debug.print , strValue '* next i '*
> '* End Sub '* '***********************************************
***
> *******************************'gm6s32.dll business logic functionsPublic
> Declare Function GMW_Execute Lib "gm6s32.dll" (ByVal strFuncName AsString,
> ByVal hgmnv As Any) As Long'create , release & copy name value
> containersPublic Declare Function GMW_NV_Create Lib "gm6s32.dll" () As
> LongPublic Declare Function GMW_NV_CreateCopy Lib "gm6s32.dll" (ByVal hgmnv
> AsLong) As LongPublic Declare Sub GMW_NV_Delete Lib "gm6s32.dll" (ByVal hgmnv
> As Long)Public Declare Sub GMW_NV_Copy Lib "gm6s32.dll" (ByVal
> hgmnvDestination AsLong, ByVal hgmnvSource As Long)'value typePublic Enum
> GMWNVValueType GMW_NV_VALUE_TYPE_NO_NAME& = 0
> GMW_NV_VALUE_TYPE_SINGLE_STRING& = 1 GMW_NV_VALUE_TYPE_MULTI_STRING& = 2
> GMW_NV_Value_Type_Single_NV& = 3 GMW_NV_VALUE_TYPE_MULTI_NV& = 4End
> EnumPublic Declare Function GMW_NV_GetValueType Lib "gm6s32.dll" (ByVal hgmnv
> AsLong, ByVal strName As String) As GMWNVValueType'get and set by namePublic
> Declare Function GMW_NV_GetValue Lib "gm6s32.dll" (ByVa
l h
> gmnv AsLong, _
> ByVal strName AsString, _
> ByValstrDefaultValue As String) As GMWStrPublic Declare Sub
> GMW_NV_SetValue Lib "gm6s32.dll" (ByVal hgmnv As Long, _
> ByVal strName AsString, _
> ByVal strValue AsString)Public Declare
> Function GMW_NV_GetNvValue Lib "gm6s32.dll" (ByVal hgmnv AsLong, ByVal
> strName As String) As LongPublic Declare Sub GMW_NV_SetNvValue Lib
> "gm6s32.dll" (ByVal hgmnv As Long,_
> ByVal strName AsString, _
> ByVal hgmnvValue AsLong)Public Declare Function
> GMW_NV_SetEmptyNvValue Lib "gm6s32.dll" (ByVal hgmnvAs Long, ByVal strName As
> String) As Long 'add a empty nv and retuns it tobe filled buy caller'
> GMW_NV_SetStr' Set one or mor
e n
> ame value pairs'' strDlmName : Delimiter between name and value'
> strDlmVal : Delimiter between different name value pairs'
> strData : string with name value pairs'' strDlmVal & strDlmVal
> can be the same value'' Example:' GMW_NV_SetStr(hgmnv,
> "=", ";","COMPANY=GoldMine;CONTACT=Wilson")'
> GMW_NV_SetStr(hgmnv, "&", "&","COMPANY&GoldMine&CONTACT&Wilson")Public
> Declare Sub GMW_NV_SetStr Lib "gm6s32.dll" (ByVal hgmnv As Long, _
> ByVal strDlmName AsString, _
> ByVal strDlmVal AsString, _
> ByVal strData As String) 'Check if
> value exists 'return : 0 failed, 1 successesPublic Declare Function
> GMW_NV_NameExists Lib "gm6s32.dll" (ByVal hgmnv AsLong, ByVal strName As
> String) As Long 'Remove valuesPublic Declare Sub GMW_NV_EraseName Lib
> "gm6s32.dll" (ByVal hgmnv As Long,ByVal
st
> rName As String)Public Declare Sub GMW_NV_EraseAll Lib "gm6s32.dll" (ByVal
> hgmnv As Long) 'Iterate over list one basedPublic Declare Function
> GMW_NV_Count Lib "gm6s32.dll" (ByVal hgmnv As Long)As LongPublic Declare
> Function GMW_NV_GetValueTypeFromIndex Lib "gm6s32.dll" (ByValhgmnv As Long,
> ByVal index As Long) As LongPublic Declare Function GMW_NV_GetNameFromIndex
> Lib "gm6s32.dll" (ByValhgmnv As Long, ByVal index As Long) As GMWStrPublic
> Declare Function GMW_NV_GetValueFromIndex Lib "gm6s32.dll" (ByValhgmnv As
> Long, ByVal index As Long) As GMWStr 'Multiple values per name handling 'Get
> number of values for a namePublic Declare Function GMW_NV_GetMultiValueCount
> Lib "gm6s32.dll" (ByValhgmnv As Long, ByVal strName As String) As Long 'Get
> the n'th one based value of a multi value pairPublic Declare Function
> GMW_NV_GetMultiValue Lib "gm6s32.dll" (ByVal hgmnvAs Long, _
> ByVal strNameAs String, _
>
> n As Long, _
> ByValstrDefaultValue As String) As GMWStr
> '1 basedPublic Declare Function GMW_NV_GetMultiNvValue Lib "gm6s32.dll"
> (ByVal hgmnvAs Long, _
> ByValstrName As String, _
> ByVal n AsLong) As Long '1 based 'Append a multi value.
> return's the number of multi valuesPublic Declare Function GMW_NV_AppendValue
> Lib "gm6s32.dll" (ByVal hgmnv AsLong, _
> ByVal strNameAs String, _
> ByVal strValueAs String) As Long'append a copy
> of value ownership of value does not changePublic Declare Function
> GMW_NV_AppendNvValue Lib "gm6s32.dll" (ByVal hgmnvAs Long, _
> ByVal strNameAs String, _
> ByValhgmnvValue
> As Long) As LongPublic Declare Function GMW_NV_AppendEmptyNvValue Lib
> "gm6s32.dll" (ByValhgmnv As Long, ByVal strName As String) As Long ' appends
> a empty NV valueand retuns it to be filled 'getting the parent and the root
> of a HGMNVPublic Declare Function GMW_NV_GetRoot Lib "gm6s32.dll" (ByVal
> hgmnv AsLong) As LongPublic Declare Function GMW_NV_GetParent Lib
> "gm6s32.dll" (ByVal hgmnv AsLong) As LongPublic Declare Function
> GMW_NV_IsRoot Lib "gm6s32.dll" (ByVal hgmnv As Long)As Long ' you cant test :
> hgmnv == GMW_NV_GetRoot(hgmnv);'helper functions values are stored as strings
> this function just translateto and fromPublic Declare Sub GMW_NV_SetInt Lib
> "gm6s32.dll" Alias "GMW_NV_SetIntValue"(ByVal hgmnv As Long, _
> ByVal strName
> As String, _
> ByVal V
alu
> e As Long)Public Declare Sub GMW_NV_AppendInt Lib "gm6s32.dll"
> Alias"GMW_NV_AppendIntValue" (ByVal hgmnv As Long, _
> ByVal strName As
> String, _
> ByVal Value As Long)Public Declare Function GMW_NV_GetInt Lib
> "gm6s32.dll" Alias"GMW_NV_GetIntValue" (ByVal hgmnv As Long, _
> ByVal
> strName As String, _
> ByVal defValue As Long) As LongPublic Declare
> Function GMW_NV_GetIntMulti Lib "gm6s32.dll" Alias"GMW_NV_GetIntMultiValue"
> (ByVal hgmnv As Long, _
> ByVal strName As String, _
>
> ByVa
l d
> efValue As Long) As Long '1 based'These Boolean helper functions should not
> be called directly. Use theequivalent wrapper functions'in the declarations
> section of this module for safe type-castingPublic Declare Sub GMW_NV_SetBool
> Lib "gm6s32.dll" Alias"GMW_NV_SetBoolValue"
> ByVal hgmnv As Long, _
> ByVal strName As String, _
> ByVal Value As
> Long)Public Declare Sub GMW_NV_AppendBool Lib "gm6s32.dll"
> Alias"GMW_NV_AppendBoolValue" (ByVal hgmnv As Long, _
> ByVal strName As
> String, _
> ByVal Value As Long)Public Declare Function GMW_NV_GetBool
> Lib "gm6s32.dll" Alias"GMW_NV_GetBoolValue" (ByVal hgmnv As Long, _
>
> ByVal strName As String, _
> ByVal defValue As Long) As LongPublic
> Declare Function GMW_NV_GetBoolMulti Lib "gm6s32.dll"
> Alias"GMW_NV_GetBoolMultiValue" (ByVal h
gmn
> v As Long, _
> ByVal strName As String, _
>
> ByVal defValue As Long) As Long '1 based 'A framework for observing action on
> HGMNV (Observer pattern ). 'Currently we only support delete notify
> (GMW_NV_NOTIFY_DELETE) 'An observer can remove himself with a key he gets
> when he attaches to 'If you get the delete notification do not remove
> yourself as an observer.this is done automatically. ' Nonfictions codePublic
> Enum GMWNVNotification GMW_NV_NOTIFY_NOTHING& = 0 GMW_NV_NOTIFY_DELETE&
> = 1 'The observed HGMNV is being deletedEnd Enum '
> [notifyProc]Definition of Notification Procedure ' Parameters: '
> hgmnv The NV Container that is notifying
> theobserver ' lNotifyCode The notify code (currently
> onlyGMW_NV_NOTIFY_DELETE) '
> dwParam a parameter that was given by theobserver when
> it joined the observer list ' lObserverKey the key that
> GMW_NV_Observe retuned ' See Declarations Section for NotifyProc Stub '
> Function GMW_NV_Observe ' Attach an observer '
> PARAMETERS: ' hgmnv the HGMNV to attach to '
> notifyProc a callback to call on notification '
> dwParam a DWORD parameter to pass back to thenotification function '
> RETUN VALUE: ' an observer Key or 0 on error
> ' Caller must use this key to remove himself
> fromObserver list 'Public Declare Function GMW_NV_Observe Lib "gm6s32.dll"
> (ByVal hgmnv AsLong, _
> ByVal NotifyProc AsLong, _
> ByVal dwParam AsLong) As Long 'Returns an observer Key ' Function GMW_
NV_
> UnObserve ' Remove from observer list '
> PARAMETERS: ' hgmnv the HGMNV to remove from
> obsever list ' lObserverKey the key that GMW_NV_Observe
> retunedPublic Declare Sub GMW_NV_UnObserve Lib "gm6s32.dll" (ByVal hgmnv As
> Long,ByVal lObserverKey As Long)Public Sub GMW_NV_SetBoolValue(hgmnv As Long,
> strName As String, bValue AsBoolean) Call GMW_NV_SetBool(hgmnv, strName,
> CLng(bValue * -1))End SubPublic Function GMW_NV_GetBoolValue(hgmnv As Long,
> strName As String,bdefValue As Boolean) As Boolean GMW_NV_GetBoolValue =
> CBool(GMW_NV_GetBool(hgmnv, strName,CLng(bdefValue * -1)))End FunctionPublic
> Function GMW_NV_GetBoolMultiValue(hgmnv As Long, strName As String,bdefValue
> As Boolean) As Boolean GMW_NV_GetBoolMultiValue =
> CBool(GMW_NV_GetBoolMulti(hgmnv, strName,CLng(bdefValue * -1)))End
> FunctionPublic Sub GMW_NV_AppendBoolValue(hgmnv As Long, strName As String,
> bValueAs Boolean) Call GMW_NV_Appen
dBo
> ol(hgmnv, strName, CLng(bValue * -1))End SubPublic Function NotifyProc(hgmnv
> As Long, notifycode As GMWNVNotification,dwParam As Long, lKey As Long) As
> Long 'MsgBox "hgmnv - " & hgmnv & ", notifyCode - " & notifycode &
> ",dwParam - " & dwParam 'TODO: Place your Notification Function code in
> this functionEnd FunctionPublic Function GMString(strPtr As GMWStr) As String
> Dim strlen As Long strlen = lstrlen(strPtr.Ptr) If strlen = 0 Then
> Exit Function ReDim strbuf(strlen - 1) As Byte CopyMemory strbuf(0),
> ByVal strPtr.Ptr, UBound(strbuf) + 1 GMString = StrConv(strbuf,
> vbUnicode)End Function
> ---
> [This E-mail scanned for viruses by Declude EVA]
>
> _______________________________________________
> Perl-Win32-Users mailing list
> [email protected]
> To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs