|
May be i understood wrongly,
CDC::FromHandle()
"If a CDC object is not attached to the handle, a temporary CDC object is created and attached." from msdn.
|
|
|
|
|
To wrap a HDC in a CDC use the CDC::Attach method. If the HDC is already wrapped by a CDC use the CDC::FromHandle method, as mentioned by the first replier.
Steve
|
|
|
|
|
Stephen Hewitt wrote: To wrap a HDC in a CDC use the CDC::Attach method. If the HDC is already wrapped by a CDC use the CDC::FromHandle method,
If Microsoft ever starts documenting that stuff CodeProject traffic would really decrease.
led mike
|
|
|
|
|
Thank you very much for your replies.
I will try this now.
|
|
|
|
|
CDC construtor is of any help??
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You/codeProject$$>
|
|
|
|
|
|
I've succcessfully created a DLL full of classes that I've exported to use in another DLL. But I have a class that full of static member functions and the function names arent resolving
When I try to create a new DLL, importing the class definitions, I get unresolved external errors, but only for the static member functions. Why is that?
Shouldnt the class be imported when its declared?
Below is the class definitions
devlibrary.h - Included in my stdafx.h for both DLLs
#define DEV_DLL_EXPORT __declspec ( dllexport )
#define DEV_DLL_IMPORT __declspec ( dllimport )
#ifdef _DEVLIBRARY_DLL
#define DEVLIBRARY_CLASS DEV_DLL_EXPORT
#else
#define DEVLIBRARY_CLASS DEV_DLL_IMPORT
#endif
cpstinterface.h
class DEVLIBRARY_CLASS CPSTDriverInterface
{
static short GetCnlVarsCount();
static CCnlVar *GetAllCnlVar(short var_rank);
static CCnlVar *GetAllCnlVar(char *szProtVarName);
}
main.cpp
#include "cpstdriverinterface.h"
{
...
dwNumOfVars = CPSTDriverInterface::GetCnlVarsCount();
...
}
Error
error LNK2001: unresolved external symbol "__declspec(dllimport) public: static short __stdcall CPSTDriverInterface::GetCnlVarsCount(void)" (__imp_?GetCnlVarsCount@CPSTDriverInterface@@SGFXZ)
|
|
|
|
|
Other than the fact that the members are private in your example, it works for me.
Have you linked with the import library created by the creation of the dll containing the static methods?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Oops.. That's a copy mistake. The functions public in my definition.
Yes I link the import library file into project. Everything else links ok, but the static function dont.
|
|
|
|
|
Did you provide a body for your function (any cpp file in your dll that contains it) ?
|
|
|
|
|
hmm the only other thing I can see is make sure you don't define
_DEVLIBRARY_DLL in the project for the DLL doing the importing.
FWIW, I hardcoded this code into a DLL and an EXE project:
class __declspec(dllexport) CPSTDriverInterface
{
public:
static short GetCnlVarsCount();
static int *GetAllCnlVar(short var_rank);
static int *GetAllCnlVar(char *szProtVarName);
};
short CPSTDriverInterface::GetCnlVarsCount()
{
return 3;
}
int *CPSTDriverInterface::GetAllCnlVar(short var_rank)
{
return 0;
}
int *CPSTDriverInterface::GetAllCnlVar(char *szProtVarName)
{
return 0;
}
class __declspec(dllimport) CPSTDriverInterface
{
public:
static short GetCnlVarsCount();
static int *GetAllCnlVar(short var_rank);
static int *GetAllCnlVar(char *szProtVarName);
};
int _tmain()
{
short NumOfVars = CPSTDriverInterface::GetCnlVarsCount();
return 0;
} No problemo
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark
This question is for curious I think its late on your country and you must sleep,right?
|
|
|
|
|
12:21 am
I'm going to sleep
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Are you on the west coast?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Si
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thank you for your answer Mark.
|
|
|
|
|
Thank you for the suggestion.
I received an answer on msdn forums. I had one library built w/ __stdcall and another with __cdecl. Once I changed them to match, it worked.
Thanks again
|
|
|
|
|
Ohhh cool. Thanks for the update. Filed to my (leaky) memory for future reference
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
does anyone knows what is the redistribution file for VS 2008? on VS 2005 was VCREDIST_x86.EXE, but i could not find any file simillar in the VS 2008 directories
tjie pouw
|
|
|
|
|
|
I am developing an application that will use multiple Dialogs. I am using the CreateDialog function as shown:
CreateDialog(hInst, MAKEINTRESOURCE(IDD_PRINT), NULL, (DLGPROC) PrintDialog);<br />
When CreatDialog is called only the controls of IDD_PRINT are shown, the buttons on the new Dialog function as well.
What gives
Thanks much, Tom.
|
|
|
|
|
Is your dialogproc implemented properly?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks for fast reply
DialogProc below;
static BOOL CALLBACK PrintDialog( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam)<br />
{<br />
switch(message)<br />
{<br />
case WM_INITDIALOG:<br />
return TRUE;<br />
case WM_COMMAND:<br />
switch (LOWORD (wParam))<br />
{<br />
case IDOK:<br />
case IDCANCEL:<br />
EndDialog(hDlg, 0);<br />
return TRUE;<br />
}<br />
}<br />
}<br />
The call is;
case BTN_PRINT:<br />
CreateDialog(hInst, MAKEINTRESOURCE(IDD_PRINT), NULL, (DLGPROC) PrintDialog);<br />
<br />
I am not sure about registration of a new class for the PrintDialog, so I made no provsions for same.
|
|
|
|
|
Does this work....
static <font color="Red">INT_PTR</font> CALLBACK PrintDialog( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg, 0);
return TRUE;
}
}
<font color="Red">return FALSE;</font>
} ...??
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
No I get the same result.
|
|
|
|