|
That should have stayed in the CPP, yes. I'll hilight the sample code - I only added the stuff at the top.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks very much this is execellent
There're a couple of things I do not understand however.
1. I understand "__declspec(dllexport)", but not sure why we need "__declspec(dllimport)"
2. I do understand precompile directive however:
<br />
#ifdef _BUILDINGDLL<br />
...<br />
#else<br />
...<br />
#endif<br />
Just not sure why when "Building DLL B" I need to "dllimport" (although I saw it in MSDN)... I don't remember I need to dllimport... just link in project settings and include header file was all I did.
|
|
|
|
|
For a true global variable/function you need ONE instance of it.
In your case it was in DLL A.
For other modules to be able to use the globals, you need to export it from
the DLL it exists in and import it in any module that uses it.
By using the preprocessor directives, you can keep the declaration in one header file
instead of two (one for export, one for import). Any changes to the class only have to
be made in one place.
This is how MFC is built, except there's a 3rd option, since MFC can also be built into a
static library.
By the way, you can also import/export individual static members of a class instead of
importing/exporting the entire class. Same method except you put the __declspec()
on the variable declaration instead of the class declaration.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Also, I already have the following by ClassWizard when setup the new project:
#ifdef UTILITIES_EXPORTS<br />
#define UTILITIES_API __declspec(dllexport)<br />
#else<br />
#define UTILITIES_API __declspec(dllimport)<br />
#endif<br />
Do I need to do this again for individual class?
devy
|
|
|
|
|
devvvy wrote: Do I need to do this again for individual class?
You can use the same UTILITIES_API macro on a class.
The point is to only export from one module, the module where the actual
static instance(s) exist. All other modules should import.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks very much Mark, I been very needy
|
|
|
|
|
You're welcome!
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
int* pInt = new int[2*3]; 6 elements
So you can access it like pInt[0],1,2,..
now i want to acess it as a 2dim.
for example,
0 1
2 3
4 5
Or
0 1 2
3 4 5
i have declared a pointer like int (*pintPtr)[2][3];
Now how do I assign this to pInt?
something like ,
pintPtr=((int*)[2][3])&pInt;?
This do not work. Please help.
----------------------------
286? WOWW!
|
|
|
|
|
void main()
{
int (*p)[3] = new int[2][3];
int i, j;
for(i = 0; i < 2; i++) {
for(j = 0; j < 3; j++) {
p[i][j] = i +j;
}
printf("\n");
}
int (*pX)[3] = p;
for(i = 0; i < 2; i++) {
for(j = 0; j < 3; j++) {
printf("%d ", pX[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < 2; i++, pX++) {
for(j = 0; j < 3; j++) {
printf("%d ", (*pX)[j]);
}
printf("\n");
}
delete [] p;
}
Maxwell Chen
|
|
|
|
|
Dear All
I want to write one DLL. for this purpose, I add one static library to project.
When I compile the program I get following link error.
INK : fatal error LNK1104: cannot open file "nafxcwd.lib"
Error executing link.exe.
But when I add the path of nafxcwd.lib to my lib file paths I get 716 errors.
Do you know how I can remove this problem.
Regards
Monhi
|
|
|
|
|
What version of Visual Studio?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I want to highlight part of the text in a static control. I subclassed an existing dialog which can do the trick to one of it's built in controls. However, changing the functionality of the dialog box requires me to do it myself.
The resource code for the control:
CONTROL "", 1027, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 21, 103, 190, 69
Spying on the control under normal operation does only reveal the messages WM_GETTEXT,WM_SETTEXT and WM_GETTEXTLENGTH. Although the intended highlighting is actually visible in the control, no other messages are received, which is very confusing to me.
|
|
|
|
|
I think if you use of CEdit control is better than to CStatic but if you want on the CStatic you can derived CStatic.
|
|
|
|
|
Thank you.
I cannot use CEdit, because I use a 3rd party dialog, and the control is already there.
The only thing I can think of now is creating another control right above it, but only as a last resort.
|
|
|
|
|
So I think easy way is use of a CStatic derived then you can use of WM_ERASEBKGND or WM_PAINT for show values of control then if you need to highlight a section of text use of SetBkMode (in fact you work with four function SetTextColor/SetBkColor/DrawText/SetBkMode).;)
|
|
|
|
|
You can create derive class of CStatic and do following:
1. Add in the message map
<br />
ON_WM_CTLCOLOR_REFLECT()<br />
2. Change Text color in handling function
<br />
HBRUSH CMyStatic::CtlColor(CDC *pDC, UINT uiCtlColor)<br />
{<br />
pDC->SetTextColor();<br />
pDC->SetBkMode(TRANSPARENT);<br />
<br />
return (HBRUSH) GetStockObject(NULL_BRUSH);<br />
}<br />
Good luck.
Henky Purnawan
henky@online-resource.org
|
|
|
|
|
Hi
I am trying to split the MDI client window(not child).Like this GUI:
http://www.smidgeonsoft.com/images/PEBrowsePro945x689.jpg
In the left side there is a treeview and the right side there are MDI windows.
I can use splittter in SDI application wtih this code and it can split:
<br />
class CMainFrame : public CFrameWnd<br />
{<br />
...<br />
protected:<br />
CSplitterWnd m_wndSplitter;<br />
...<br />
};<br />
<br />
<br />
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, <br />
CCreateContext* pContext) <br />
{<br />
CSize minWindow(10, 10);<br />
<br />
int nRows = 2, nColumns = 1;<br />
<br />
return m_wndSplitter.Create(this, nRows, nColumns,<br />
minWindow, pContext);<br />
}<br />
But this doent work with MDI application.
I can't divide MDI client window. I tried this:
<br />
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)<br />
{<br />
CSize minWindow(10, 10);<br />
<br />
int nRows = 2, nColumns = 1;<br />
<br />
m_wndSplitter.Create(this, nRows, nColumns,<br />
minWindow, pContext);<br />
<br />
return CMDIFrameWnd::OnCreateClient(lpcs, pContext);<br />
}<br />
But it gives run time error about ASSERT(pContext != NULL);
How can i divide MDI client window with splitter so i can insert left side a treeview(static/locked) and in the left side i can show view windows..
I couldnt find the solution.
I am looking for your answers.
Thanks...
|
|
|
|
|
I found this(it is what i looked but it is wtl):
http://www.codeproject.com/wtl/mdisplit.asp
But i don't understand the code.
Is there a way to this with MFC?
|
|
|
|
|
If you send me an email, I'll send you (and anyone else interested) a VS2005 project that does this.
I was going to submit it as an article but it's simple and I can't think of anything to write about it.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi
Thank you very much.
I am looking for your e-mail.
-- modified at 2:21 Monday 6th August, 2007
|
|
|
|
|
Mark Salsbery wrote: an email, I'll send you (and anyone else interested) a VS2005 project
And for VS2003 email isnt work?;)
|
|
|
|
|
|
|
hi
i exactly follow what in KernelIoControl function's description in MSDN and elsewhere. i know that i've done no mistake. but it gives me the same Preset ID's and Platform ID's for more than one device. please don't tell me the same things in the documentations. just tell me what may be the problem. maybe a fault of manufacturer?
thx
|
|
|
|
|
In the resource edit box,what is the unit of the size which is shown at the bottom?
|
|
|
|