From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: *** X-Spam-Status: No, score=3.2 required=5.0 tests=BAYES_00,RATWARE_MS_HASH, RATWARE_OUTLOOK_NONAME,T_FILL_THIS_FORM_SHORT autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,78dd577849ebc676,start X-Google-Attributes: gid103376,public From: "Paul Whittington" Subject: OLE Automation with Win32Ada and Personal ObjectAda Date: 1996/09/25 Message-ID: <01bbaaf8$07a9a3f0$24af1486@pc-phw> X-Deja-AN: 185306504 organization: Idaho National Engineering Laboratory newsgroups: comp.lang.ada Date: 1996-09-25T00:00:00+00:00 List-Id: Can anyone help? I'm trying to get a very small OLE program working as part of a larger effort. As GNAT/NT with Win32Ada is not yet available I've only tried to compile and link with Personal ObjectAda. I get several "unresolved external symbol"s and can't seem to find a .lib or .obj(s) to link with to resolve externals. I've called Thompson Software twice for tech support and e-mail them with no response in 18 hours. Here are the linker errors: ObjectAda (tm) version 7.0.100: adabuild Copyright (c) 1996, Alsys, Inc. All Rights Reserved. obj\controller.eltab.obj link /nologo @controller.rsp av$win32.lib(objbases.obj) : error LNK2001: unresolved external symbol _IID_IWeakRef av$win32.lib(objbases.obj) : error LNK2001: unresolved external symbol ___MIDL__intf_0000_v0_0_s_ifspec av$win32.lib(objbases.obj) : error LNK2001: unresolved external symbol ___MIDL__intf_0000_v0_0_c_ifspec av$win32.lib(objbases.obj) : error LNK2001: unresolved external symbol _IWinTypes_v0_1_s_ifspec av$win32.lib(objbases.obj) : error LNK2001: unresolved external symbol _IWinTypes_v0_1_c_ifspec controller.exe : fatal error LNK1120: 5 unresolved externals Link of controller failed rc=25. Tool execution failed. Here is the source: with OLE.OLE_String; with Win32.Objbase; use Win32.Objbase; with Win32.Winerror; use Win32.Winerror; with Win32.Winnls; use Win32.Winnls; procedure Controller is Server_Name : OLE.OLE_String.Class; LpCLSID : aliased CLSID; Status : Win32.Objbase.HRESULT; begin OLE.OLE_String.Construct (Server_Name,"Excel.Application"); Status := CLSIDFromProgID(OLE.OLE_String.LPCOLESTR(Server_Name),LpCLSID'Access); if FAILED (Win32.Winerror.HRESULT (Status)) then raise PROGRAM_ERROR; end if; end Controller; package OLE is end OLE; with Ada.Finalization; with OLE.OLE_String_Rep; with Win32.Objbase; package OLE.OLE_String is type Class is new Ada.Finalization.Limited_Controlled with private; procedure Construct (Object : in out Class; Value : in String); function LPCOLESTR (Object : in Class) return Win32.Objbase.LPCOLESTR; private type Class is new Ada.Finalization.Limited_Controlled with record State : OLE.OLE_String_Rep.Class; end record; procedure Initialize(Object : in out Class); procedure Finalize (Object : in out Class); end OLE.OLE_String; with Win32.Objbase; package OLE.OLE_String_Rep is type Class is private; procedure Construct (Object : in out Class; Value : in String); procedure Destruct (Object : in out Class); function LPCOLESTR (Object : in Class) return Win32.Objbase.LPCOLESTR; private type State; type Class is access State; end OLE.OLE_String_Rep; package body OLE.OLE_String is procedure Initialize(Object : in out Class) is begin null; end Initialize; procedure Finalize (Object : in out Class) is begin OLE.OLE_String_Rep.Destruct (Object.State); end Finalize; procedure Construct (Object : in out Class; Value : in String) is begin OLE.OLE_String_Rep.Construct (Object.State,Value); end Construct; function LPCOLESTR (Object : in Class) return Win32.Objbase.LPCOLESTR is begin return OLE.OLE_String_Rep.LPCOLESTR (Object.State); end LPCOLESTR; end OLE.OLE_String; with Ada.Characters.Handling; with Ada.Unchecked_Deallocation; package body OLE.OLE_String_Rep is type OLE_Char_Array is array (Positive range <>) of aliased Win32.Objbase.OLECHAR; type OLE_Char_Array_Access is access OLE_Char_Array; type State is record The_Array : OLE_Char_Array_Access; end record; procedure Construct (Object : in out Class; Value : in String) is begin Object.The_Array := new OLE_Char_Array (1..Value'Length+1); if Value'Length /= 0 then declare WValue : Wide_String := Ada.Characters.Handling.To_Wide_String (Value); begin for Index in Value'First..Value'Last loop Object.The_Array (Index) := Win32.Objbase.OLECHAR(WValue (Index)); end loop; end; end if; Object.The_Array (Object.The_Array'Last) := Win32.Objbase.OLECHAR'Val (0); end Construct; procedure Destruct (Object : in out Class) is procedure Free_OLE_Char_Array_Access is new Ada.Unchecked_Deallocation (OLE_Char_Array,OLE_Char_Array_Access); begin Free_OLE_Char_Array_Access (Object.The_Array); end Destruct; function LPCOLESTR (Object : in Class) return Win32.Objbase.LPCOLESTR is begin return Object.The_Array (Object.The_Array'First)'Access; end LPCOLESTR; end OLE.OLE_String_Rep;