|
I am no getting the following points
Does statically link means always a Lib and dynamically linking means a dll?
Statically linking can be using dll and lib both?
Should Lib has to be used with dll in an application?
I am a beginner
|
|
|
|
|
himangshuS wrote: Does statically link means always a Lib and dynamically linking means a dll?
A "lib" doesn't always hold the same meaning. When you are using a dll, a "lib" becomes dummy. It's just used to hold information about the dll when you compile. You put all your functionality into the dll. It holds the content for example an exported class or a group of functions. The lib holds all information. The linker looks for these information.
You can link to a dll both statically and dynamically. When you statically link it. (just like you link an MFC runtime) This gets added to your executable. You will not have a dependency but the executable size becomes bigger. When you link dynamically, the dll is kept independent and your exe uses it everytime and hence the advantage. Any number of exes can share the same dll.
himangshuS wrote: Should Lib has to be used with dll in an application?
As I said, when you compile a code that uses a DLL, you'd require the libs. You don't even need your DLL when you compile. The LIB has all the information about the dll. The dll is required only at the run time.
Also, you can by pass the usage of libs if you are dynamically loading the dll using
LoadLibrary() & GetProcAddress calls. But you should know the type information in prior. For example the function signature.
Also occasionally you can build libs with brains- a static library. That's old an way though.
So I got your point. You are confused between libs,static library, dll & static linking. lol
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
thanks,
Could you plese tell me in order to make use of a win32 dll( which has a class named abc), to be used in MFC application.
I mean the settings has to be made.
I included the lib file and tried to create an object of the class abc.
abc obj;
aa=obj.myFunc (1,3);
Its giving an error....
error LNK2001: unresolved external symbol "public: virtual __thiscall abc::~abc(void)" (??1abc@@UAE@XZ)
DemoDlg.obj : error LNK2001: unresolved external symbol "public: int __thiscall abc::myFunc(int,int)" (?myFunc@abc@@QAEHHH@Z)
DemoDlg.obj : error LNK2001: unresolved external symbol "public: __thiscall abc::abc(void)" (??0abc@@QAE@XZ)
Debug/Demo.exe : fatal error LNK1120: 3 unresolved externals
regards,
Himangshu S
I am a beginner
|
|
|
|
|
You should export your class.
class __declspec(dllexport) CyourClass
{
};
Then in the linker options->Addition include libraries, you must add the CYourClass.lib.
You can also use
#pragma comment(lib,"CYourClass.lib")
Also make sure every time you rebuild the dll, you are using the latest lib to link with the exe.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
thanks for the reply..
But as i have mentioned , i am using static linking...ie there is no dll. only Lib file.
Could you confirm the same.
also what is the error cannot open file "MathLib.obj" means. when I already added the LIB file using the setting->link->general->object/library module
Thanks in advance
I am a beginner
<div class="ForumMod">modified on Wednesday, March 4, 2009 3:31 AM</div>
|
|
|
|
|
Okay let's troubleshoot that one. Remove all types of references to your lib.
just add this pragma to include you lib (example) :
#pragma comment(lib,"C:\\yourclass\\Win32StaticLib.lib")
And try the same. I think you are referring to a wrong path. Just check and tell me. Here in static lib you dont need to export or anything. You can simply type in the code and build the lib and start using it. I just tried a sample. Everything works fine.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
thanks
I did the same...But got thte following errors...
svcrtd.lib(cinitexe.obj) : warning LNK4098: defaultlib "libcd.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
DemoDlg.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall abc::~abc(void)" (??1abc@@UAE@XZ)
DemoDlg.obj : error LNK2001: unresolved external symbol "public: int __thiscall abc::myFunc(int,int)" (?myFunc@abc@@QAEHHH@Z)
Please help me
Thanks
I am a beginner
|
|
|
|
|
just for your clarification..
I have a class abc .the header file is as follows
// abc.h: interface for the abc class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ABC_H__B8AC41A0_E396_422A_A532_0E8412AD2D02__INCLUDED_)
#define AFX_ABC_H__B8AC41A0_E396_422A_A532_0E8412AD2D02__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class abc
{
public:
abc();
~abc();
int myFunc(int ,int);
};
#endif // !defined(AFX_ABC_H__B8AC41A0_E396_422A_A532_0E8412AD2D02__INCLUDED_)
the implementation file is as follows
// abc.cpp: implementation of the abc class.
//
//////////////////////////////////////////////////////////////////////
#include "abc.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
abc::abc()
{
}
abc::~abc()
{
}
int myFunc(int a,int b)
{
return (a+b);
}
thnaks
I am a beginner
|
|
|
|
|
himangshuS wrote:
int myFunc(int a,int b)
{
return (a+b);
}
This is wrong. You need to prefix the class' name.
int abc::myFunc(int a,int b)
{
return (a+b);
}
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
sorry for that silly mistake..
but its still giving some error..
DemoDlg.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall abc::~abc(void)" (??1abc@@UAE@XZ)
Debug/Demo.exe : fatal error LNK1120: 1 unresolved externals
actually to use the method, I made a object of abc and used as follows..is that fine?
#include "stdafx.h"
#include "Demo.h"
#include "DemoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "abc.h"
#pragma comment(lib,"C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\dll and lib\\statically lin (LIB)\\MathLib\\Debug\\MathLib.lib")
void CDemoDlg::OnButton1()
{
int aa,bb;
abc obj;
aa=obj.myFunc(1,3);
}
I am a beginner
|
|
|
|
|
Ok I'm still here. Do you have any specific implementation in your destructor? Even if it's yes, Let's try one thing. Just a temporary test, we'll restore it back. Just remove the destructor & try it again. That shouldn't be a problem actually but let's see.
Just remove this piece:
~abc(void);
&
abc::~abc(void)
{
}
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Okay I'll be away for sometime. If you can wait, let me comeback otherwise someone here will answer you. Good luck Bye.
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Not a problem...
Anyway thanks for evrything Vunic
I am a beginner
|
|
|
|
|
its a problem of class i guess. When i created a simple function it works. But with a class doesn't work...
I am a beginner
|
|
|
|
|
It's not a problem with the class. Can you send your solution (lib's) to dejavunic_at_gmail ?
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
How to Create a Simple Win32 DLL [^].
Of one Essence is the human race
thus has Creation put the base
One Limb impacted is sufficient
For all Others to feel the Mace
(Saadi )
|
|
|
|
|
Hi All,
How can I convert an 16bit grayscale bitmap to 8 bit grayscale bitmap?
Thanks
akt
|
|
|
|
|
Hi everybody,
I'm currently working with 8-bit grayscale bitmap scanned from my HP LaserJet 3055. I am able to read the Bitmap Header and its data into an array of BYTE. I write the values directly into Text File, the result is great! However, I can't create another BMP file using the data array I have.
For 24-bit BMP, what we have to write after the Header is the RGB data, but for the grayscale one we have to use the Color Table, right? How can I use the Color table properly?
Please anyone helps me on how to create an 8-bit grayscale bitmap!
Thanks,
Ing LengIeng
Software Developer
|
|
|
|
|
Hi,
For an 8 bit grayscale image, between the header and pixel data, there will a color map of 256 colors. The color map will hold 256 shades of gray(ie R=G=B).
The actual pixel data will be a reference this color map. So fo creating 8 bit grayscale image do the following steps.
1. Open a file in binary mode.
2. Write Bitmap File header to file.
3. Write Bitmap Info header to file.
4. Write Colormap to file.
5. Write pixel data to file.
6. Close file.
Thanks
Akt_4_U
akt
|
|
|
|
|
Thanks very much, Akt!
But how do I write the Colormap? I wrote the following code, but I didn't get the grayscale anymore; instead, I got a more green color for the new image.
for(int c=0; c<256; c++)
{
fwrite((BYTE*)&bmpInfo.bmiColors[c], sizeof(RGBQUAD), 1, bmpFile);
}
Regards,
Ing LengIeng
Software Developer
|
|
|
|
|
Hope you have read the ColorMap completely from source bitmap. That is you have to allocate enough memory for reading the complete ColorMap(256 colors) for source image.
The following code will do this.
BYTE* pbyThumbImage // This is your source bitmap buffer.
const ULONG COLORMAP_START_OFFSET = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ); // Color map starts after Bitmap file header and Bitmap info header.
UINT uColorMapSize = 256 * sizeof( RGBQUAD );
pBmpInfoHdr = reinterpret_cast<lpbitmapinfo>( GlobalAllocPtr( GHND, sizeof( BITMAPINFOHEADER ) + uColorMapSize ));
memcpy( pBmpInfoHdr->bmiColors, ( pbyThumbImage + COLORMAP_START_OFFSET ), uColorMapSize ); // Now complete colormap information is within your pBmpInfoHdr->bmiColors.
Now you can write this colormap to destination file using fwrite with input buffer as pBmpInfoHdr->bmiColors and size to be written as uColorMapSize.
akt
|
|
|
|
|
But soon after I've finished reading the Colormap, I displayed the value of each RGB I can see that the color itself is of color more than the grayscale. I did so by comparing the RGB I get with the value in Microsoft Paint (mspaint.exe). That's why the result of the new image is rather a color one. How can I solve this?
Ing LengIeng
Software Developer
|
|
|
|
|
Which value did u take? R G and B from color map?
akt
|
|
|
|
|
Hi Akt,
Now I've solved my problem. I make the Colormap again by myself through the loop, and write it into the new bmp.
Thanks a lot!
Regards,
Ing LengIeng
Software Developer
|
|
|
|
|
Hi all,
I placed two edit boxes and two buttons in my dialog. I want to click the first button to clear the first edit box , and click the second button to clear the second edit box .
In the function of clicking the button, writing the following:
void CSerialPortTestDlg::OnBnClickedClearrec()
{
m_sEditRec.Empty();
UpdateData(0);
}
void CSerialPortTestDlg::OnBnClickedClearsend()
{
m_sEditSend.Empty();
UpdateData(0);
}
However, when I click one button , both edit boxes are cleared!!!
Could someone tell me why ?I write these codes in vc6.0 and it's no problem.
|
|
|
|