### Author Topic: Are working libraries?  (Read 795 times)

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Are working libraries?
« on: November 23, 2020, 07:13:01 AM »
Hi Biterider!!

I have this little problem:
Code: [Select]
`TdiChilds.lib(TdiChilds.obj) : error LNK2005: _TPL_OA_Primer already defined in list.obj`
I tried to see if other code (from previous version) is working, but I can't (easily  ):
Code: [Select]
`I01_Main.inc(171) : Error A2056: Symbol already defined: _OnSize`
Last week I noted the problem is solved replacing:

Code: [Select]
` VirtualEvent OnSize, WM_SIZE`by
Code: [Select]
`    if TARGET_BITNESS eq 32    RedefineMethod    OnSize,         WPARAM, LPARAM    else  VirtualEvent      OnSize,         WM_SIZE  endif`
Now look like there is a problem in last version.

#### Biterider

• Moderator
• Member
• Posts: 628
• ObjAsm Developer
##### Re: Are working libraries?
« Reply #1 on: November 23, 2020, 07:52:56 AM »
Hi HSE
Can you send me your current code (by email)?

Could it be that an ancestor was accidentally changed?

Biterider

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #2 on: November 23, 2020, 08:14:02 AM »

I will make a test

The problem perhaps is only in 32 bits.

Thanks.

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #3 on: November 23, 2020, 10:10:54 AM »
Hi Biterider!

Apparently Nemesis is sleeping and don't want emails

Not tested now but "  RedefineMethod    OnSize,         WPARAM, LPARAM"  failed in 64bit machine.

TdiDemo2 is using a library, same construction don't have problems previously. See log file.

Regards.

« Last Edit: November 24, 2020, 01:45:16 AM by HSE »

#### Biterider

• Moderator
• Member
• Posts: 628
• ObjAsm Developer
##### Re: Are working libraries?
« Reply #4 on: November 23, 2020, 08:36:52 PM »
Hi HSE
I changed the TdiChilds.asm file a little and added MakeObject.cmd to make compilation easier.
You may need to change some paths on your system.

After compiling TdiChilds, I was able to compile the main app (32 bit, wide strings).
If you want to change the compilation targets, you need to change the path to the .cop file in TdiChilds.asm.

Regards, Biterider

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #5 on: November 24, 2020, 01:43:01 AM »
Hi Biterider!

Perfect

I found here MakeMyObjects.cmd. Long time without making something big in OA Fusion, I forgot totally that part.

Thanks very much, HSE

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #6 on: November 25, 2020, 04:42:15 AM »
Hi Biterider!

I really don't like very much your new notation for libraries, I very used to ObjAsm32  , and with around 40°C is nice to stay in the shadow!!

To build libraries don't show any problem if writing:
Code: (TdiChilds.asm) [Select]
`% include @Environ(OBJASM_PATH)\Code\Macros\Model.inc   ;Include & initialize standard modulesSysSetup OOP, LIB32, WIDE_STRING;, DEBUG(WND)            ;Load OOP files and OS related objects% include &MacPath&DlgTmpl.inc% include &IncPath&Windows\CommCtrl.inc% include &IncPath&Windows\winuser.inc;Add here all files that build the inheritance path and referenced objectsLoadObjects Primer, StreamLoadObjects WinPrimer, WindowLoadObjects SimpleImageList, MaskedImageListLoadObjects MsgInterceptor, WinControl, Toolbar`
With very little modifications :
Code: (in SysSetup of Model.inc) [Select]
`  .nolist  .nocref  % include &IncPath&Windows\Windows.inc  % include &MacPath&System.inc  % include &MacPath&Memory.inc  % include &MacPath&Strings.inc  % include &MacPath&WinHelpers.inc  % include &MacPath&ConstDiv.inc  % include &IncPath&ObjAsm\ObjMem.inc  ife TARGET_BIN_FORMAT eq BIN_FORMAT_LIB        ;;          <------------------      % includelib &LibPath&Windows\GDI32.lib      % includelib &LibPath&Windows\Kernel32.lib      % includelib &LibPath&Windows\User32.lib      % includelib &LibPath&Windows\Advapi32.lib      if TARGET_BITNESS eq 32        % includelib &LibPath&ObjAsm\ObjMem32.lib      else        % includelib &LibPath&ObjAsm\ObjMem64.lib      endif  else      TARGET_LIBRARY = 1  endif    .list  .cref  externdef hInstance:HINSTANCE                         ;;Export hInstance symbol  ife TARGET_BIN_FORMAT eq BIN_FORMAT_LIB    ;;     <------------------      externdef hProcessHeap:HANDLE                         ;;Export hProcessHeap symbol      externdef p1stOMD:POINTER                             ;;Export p1stOMD symbol  endif    ;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  if TARGET_USER_INTERFACE eq USER_INTERFACE_NONE    echo User Interface: NONE  elseif TARGET_USER_INTERFACE eq USER_INTERFACE_WIN    echo User Interface: WINDOW  endif  if TARGET_BIN_FORMAT eq BIN_FORMAT_EXE    echo Binary Format:  EXE  elseif TARGET_BIN_FORMAT eq BIN_FORMAT_DLL    echo Binary Format:  DLL  elseif TARGET_BIN_FORMAT eq BIN_FORMAT_LIB    echo Binary Format:  LIB    IMPLEMENT         = FALSE                           ;;Don't implement unless MakeObject is used    MAKETEMPL         = FALSE                           ;;Don't create any object template    SHOWINHERITANCE   = FALSE                           ;;Don't output the inheritance path  endif  if TARGET_BITNESS eq 32    echo Bitness:        32  else    echo Bitness:        64  endif  if TARGET_OOP eq OOP_ENABLED    echo OOP Support:    ENABLED    % include &MacPath&Objects.inc                      ;;Here is our OOP support! => ObjAsm    if DEBUGGING      S_OBJID segment                                   ;;Define a new segment        ??ObjIDTableStart equ \$                               S_OBJID ends                                      ;;Switch back to previous segment      ??ObjIDTableCount = 0                                                                                           S_OBJERR segment                                  ;;Define a new segment        ??ObjErrTableStart equ \$                              S_OBJERR ends                                     ;;Switch back to previous segment      ??ObjErrTableCount = 0    endif      if TARGET_BIN_FORMAT eq BIN_FORMAT_LIB   ;;    <------------------        IMPLEMENT         = FALSE                           ;;Don't implement unless MakeObject is used        MAKETEMPL         = FALSE                           ;;Don't create any object template        SHOWINHERITANCE   = FALSE                           ;;Don't output the inheritance path      endif    % include &ObjPath&ObjIDs.inc                       ;;These include files must follow the    % include &ObjPath&ObjErrs.inc                      ;;  previous segment definitions  else    echo OOP Support:    DISABLED    IMPLEMENT         = FALSE                           ;;Don't implement unless MakeObject is used    MAKETEMPL         = FALSE                           ;;Don't create any object template    SHOWINHERITANCE   = FALSE                           ;;Don't output the inheritance path  endif`
Code: (in Objects.inc) [Select]
`LoadObjects macro FileNameList:vararg  for \$\$FileName:req, <FileNameList>    IMPLEMENT = FALSE    if @InStr(1, \$\$FileName, <\>) eq 0       \$\$IncObjPath textequ <&ObjPath&>      if TARGET_STR_TYPE eq STR_TYPE_ANSI        \$\$LibObjPath catstr <&ObjPath&>, <Lib\>, %TARGET_BITNESS, <A\>      else        \$\$LibObjPath catstr <&ObjPath&>, <Lib\>, %TARGET_BITNESS, <W\>      endif    else      \$\$IncObjPath textequ <>      \$\$LibObjPath textequ <>    endif    %include &\$\$IncObjPath&&\$\$FileName&.inc    ifdef TARGET_LIBRARY        ;;   <------------------        ife TARGET_LIBRARY eq 1          %includelib &\$\$LibObjPath&&\$\$FileName&.lib           endif    else        %includelib &\$\$LibObjPath&&\$\$FileName&.lib       endif  endm  ifdef TARGET_LIBRARY          ;;   <------------------   ife TARGET_LIBRARY eq 1     IMPLEMENT = TRUE                                      ;;Set default   endif  else    IMPLEMENT = TRUE                                      ;;Set default  endif    endm`
Of course must be tested more, and for sure can be improved.

Regards. HSE

#### Biterider

• Moderator
• Member
• Posts: 628
• ObjAsm Developer
##### Re: Are working libraries?
« Reply #7 on: November 25, 2020, 05:42:24 AM »
Hi HSE
I've looked at your changes and I think I've understood that you want to further automate and simplify the library compilation process. I will analyze the proposal in more depth.
What I don't understand is what you mean with "your new notation for libraries, I very used to ObjAsm32". What has changed? Can you elaborate it a bit more?
Any help is appreciated.

Biterider

PS: can you send me or post the files to make a diff? That way, it's easier to see the changes.

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #8 on: November 25, 2020, 07:27:15 AM »
What I don't understand is what you mean with "your new notation for libraries, I very used to ObjAsm32". What has changed?
Ok, perhaps it's not new. To make libraries in ObjAsm32 I always used SysSetup and LoadObjects, not even know .cop files (now I see there is one) and the use of full paths in .cmd files "it's a mistery"  .

Now is working like always I do in ObjAsm32:
Code: [Select]
`asmc28 /coff TdiChilds.asmlib TdiChilds.obj`

#### Biterider

• Moderator
• Member
• Posts: 628
• ObjAsm Developer
##### Re: Are working libraries?
« Reply #9 on: November 25, 2020, 08:17:13 AM »
Hi HSE
OK then let's demystify it.

These .cop files (Common OPtions) are a set of settings and include files for each of the 4 compilation targets in the \ObjAsm\Code\Objects\Lib directory.
These are 32A, 32W, 64A and 64W. In each of these subdirs is a different .cop file.
If you are compiling for either of these targets, you only need to use the files from one of these directories.

The idea of using .cop files was already there in ObjAsm32 (ObjMem32.cop) and I continued to use this concept in the Fusion project. By the way, ObjMem.cop currently also present.

The reason I used full paths in the MakeObject.cmd file I sent you is because it was a sort of quick solution. I could use the standard framework paths as well.

I'll review your changes this weekend when I have a little more time.

Regards, Biterider

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #10 on: November 25, 2020, 08:19:51 AM »

#### Biterider

• Moderator
• Member
• Posts: 628
• ObjAsm Developer
##### Re: Are working libraries?
« Reply #11 on: November 29, 2020, 07:24:09 AM »
Hi HSE
I now understand what you mean. I had to go back to the ObjAsm32 V1.6 sources to find that I accidentally took a different way when compiling objects in C.1.1.
Version C.1.0 was not yet able to precompile objects.

Fortunately, going back isn't a big deal.

Thank you for pointing it out.

Biterider

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #12 on: November 29, 2020, 08:54:03 AM »
Hi Biterider!

I now understand what you mean.
Fantastic

#### Biterider

• Moderator
• Member
• Posts: 628
• ObjAsm Developer
##### Re: Are working libraries?
« Reply #13 on: November 30, 2020, 05:53:39 PM »
Hello HSE
Yesterday I got the change on SysSetup working again like it was in ObjAsm32.
In the "Object".asm files I left the .cop files and updated their content. The reason is that I have to choose the right one according to the compilation targets.
If you're compiling your own object, you can replace the .cop file with the usual SysSetup declaration and select the right targets.
I added a file called MakeMyObject.cmd to the attachment to make the compilation process easier.

I had to modify many of the "object".asm files to replace the includes with the LoadObjects macro.
I pushed this update to the Github repository at https://github.com/ObjAsm/ObjAsm-C.1

The question remains whether I should rename the .cop files or leave them as they are.
The nice thing about them is that they are easy to find.

Regards, Biterider

#### HSE

• Member
• Posts: 1545
• <AMD>< 7-32>
##### Re: Are working libraries?
« Reply #14 on: December 01, 2020, 12:41:26 AM »
Hi Biterider!

Yesterday I got the change on SysSetup working again like it was in ObjAsm32.
...
I pushed this update to the Github repository at https://github.com/ObjAsm/ObjAsm-C.1
Is working perfectly

In the "Object".asm files I left the .cop files and updated their content. The reason is that I have to choose the right one according to the compilation targets.
...
The question remains whether I should rename the .cop files or leave them as they are.
The nice thing about them is that they are easy to find.
Perhaps .cop are better. I don't know. Just is nice SysSetup
And I don't see any problem in to conserve or even develop .cop system.

I had to modify many of the "object".asm files to replace the includes with the LoadObjects macro.
I think that is unnecesary. Package libs are builded with MakeObjects_x_x.cmd, very very infrequently, perhaps just once time.

Thanks. HSE