Solved

Creation of a DLL containing classes in BC 4.52

Posted on 1997-04-28
3
380 Views
Last Modified: 2012-08-14
I am working on a large project for Windows 3.1 16 bits. With time, I have been forced to reduce my stack more and more up to the point I couldn't do it anymore. So now I HAVE to make a DLL. It's a first for me and I am having a little trouble with it. Here's what happens:

Borland ++ version 4.52

Project->New Project

- Target type :
Dynamic Library [.dll]

-Platform :
Windows 3.xx (16)

-Target model :
Large

-Standard library :
Class library
Runtime
Static

In the IDE projet I delete the files .DEF and the .RC

In dll.cpp :

class _MYCLASS MyClass0
{
  public:
  int MyInt;
  ...
};


_MYCLASS is defined with

#if defined(BUILD_MY_DLL)
  #define _MYCLASS __export
#elif defined(USES_MY_DLL)
  #define _MYCLASS __import
#else
  #define _MYCLASS
#endif

In the project options creating the DLL, I define "BUILD_MY_DLL" and USES_MY_DLL in the project using the DLL


C++ compile doesn't have any problem

If I compile too many classes while editing the link, an extra dialog box appears while running BC45\BIN\IMPLIB.DLL.
It says "Critical error during transfer". The compilation is then stopped without error.

The problem disppears if I don't include too many classes in a module. But, if I create an other module using #include,
the problem reappears with no solution...

This method works on 3 classes. The DLL uses up 80 Kb. It's impossible
to add any more classes to end up with a DLL of over 300 Kb, for example.

If I create another project using the classes from the first, I can only define 2 classes and the second DLL only uses 60 Kb, which means it's  actually smaller than the first one.

I did not define any int FAR PASCAL LibMain(HINSTANCE,WORD,WORD,LPSTR) in the dll ...

I used impdef to declare classes in the .DEF but there was no change.

How to create a DLL without being penalised by this error?
Are there examples of IDE projects of DLL containing numerous classes?
Is there an upper limit of the number of classes in a DLL?

Sometimes I also get the following error while editing the link:
"Linker fatal : Unable to open file 'C:\BC45\LIB\c0dl.obj'"
But this file exists and is not corrupted...


So, in the end, I can have a big DLL but since implib crashes, I get a .LIB of 0 byte.

0
Comment
Question by:strategem
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 3

Accepted Solution

by:
gaohong earned 130 total points
ID: 1163016
Your method is correct, however, your setting seems contradictary
               
                -Standard library :
                 Class library
                 Runtime
                 Static

First you canot mix static and DLL, second you are trying to make
a DLL, and it's must be dynamic.

All the problems list, I think is followup problems, once you
made correct settings, it will be OK.

My DLL is 300K under same environment as you have win16, large,
and bc++4.52

good luck
0
 

Author Comment

by:strategem
ID: 1163017
Sorry... I forgot to mention that... I had tried both static and dynamic, with identical results.
Would you like me to send you my project via E-mail?

0
 
LVL 3

Expert Comment

by:gaohong
ID: 1163018
Yes, Could you send *.ide file
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question