|
Malli_S wrote: The way out for this is use dynamic loading of that DLL.
DLL?
|
|
|
|
|
Chris Losinger wrote: DLL?
I meant to say using LoadLibrary().
|
|
|
|
|
but the post says nothing about a DLL. it says "static library".
|
|
|
|
|
Hmm. I should have mentioned about the DLLs. I was trying to focus on dynamic linking, rather than static linking.
My mistake. I missed that.
|
|
|
|
|
Hi,
the good thing is that I have both static and dynamic libraries.
But I wanted to use only static, so that I can distribute only an exe.
But anyway, now I will have to use the dynamic library.
Thanks for the help.
Regards,
Sunil Kumar
|
|
|
|
|
If it was me I would put a C function wrapper around it. And compile that at a library. Then your app uses the second library. The dynamic loader solution works but it means that you must deal with the name mangling yourself rather than letting the compiler do it. And if the C++ requires an C++ idioms, like creating a class, then doing thing via dynamic method calls is going to be difficult.
|
|
|
|
|
But it's a third party library. He might not have the source code for that.
|
|
|
|
|
Hi,
One more thing is,it compiles properly for C++ in debug mode.
But in Release mode the same unresolved external errors, I am getting for the functions.
I have mentioned the project properties in Release mode same as in Debug mode.
But still it is unable to link to the functions in the library.
Why this behavior.Does it mean, the library is compiled in debug mode?
Regards,
Sunil.
Regards,
Sunil Kumar
|
|
|
|
|
Malli_S wrote: But it's a third party library. He might not have the source code for that.
That has nothing to do with what I said.
|
|
|
|
|
Hello everybody,
i am having text file opened in some other application(our application). if i delete this opened file from windows explorer, its deleting, so, at some point, my application crashes (while trying to write). how can i lock that file when it is use in other application?
i am using VC++ with win32.
Thanks in advance,
A. Gopinath.
|
|
|
|
|
You can use CreateFile to open an existing file with without Sharing. i.e. passing dwShareMode of CreateFile()[^] as zero.
Or you can open a file using OpenFile()[^] by passing 'OF_SHARE_DENY_READ |OF_SHARE_DENY_WRITE' to deny sharing.
|
|
|
|
|
[LockFile] locks the second file to prevent another process from accessing it while writing to it.
Sample code:
#include <windows.h>
#include <stdio.h>
void main()
{
HANDLE hFile;
HANDLE hAppend;
DWORD dwBytesRead, dwBytesWritten, dwPos;
BYTE buff[4096];
char DataBuffer[] = "This is some test data to write to the file.";
DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer);
BOOL bErrorFlag = FALSE;
hFile = CreateFile(TEXT("one.txt"),
GENERIC_READ,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open One.txt.");
return;
}
bErrorFlag = WriteFile(
hFile,
DataBuffer,
dwBytesToWrite,
&dwBytesWritten,
NULL);
hAppend = CreateFile(TEXT("two.txt"),
FILE_APPEND_DATA,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hAppend == INVALID_HANDLE_VALUE)
{
printf("Could not open Two.txt.");
return;
}
while (ReadFile(hFile, buff, sizeof(buff), &dwBytesRead, NULL)
&& dwBytesRead > 0)
{
dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);
LockFile(hAppend, dwPos, 0, dwBytesRead, 0);
WriteFile(hAppend, buff, dwBytesRead, &dwBytesWritten, NULL);
UnlockFile(hAppend, dwPos, 0, dwBytesRead, 0);
}
CloseHandle(hFile);
CloseHandle(hAppend);
}
|
|
|
|
|
hello guys. I want to have a list of all the installed programs.
More specifically, I want to know how many voice messangers ( or programs with the capability of voip: like yahoo messanger) are installed on my system.
Can your suggested answer be applied to other type of softwares (like getting names of windows media player and Cyberlink Power Player).
Thanks for any answers or pointer (even a void one, I will cast it accordingly ) on this.
This world is going to explode due to international politics, SOON.
|
|
|
|
|
|
Hello,
Stuck on a Microsoft drawing problem: The brush I'm using to draw text is being ignored, and SelectObject () returns NULL when I try to select it into a device context:
HFONT hFont = CreateFontIndirect(& logFont);
HFONT oldFont = (HFONT) SelectObject (hDc, hFont);
HBRUSH oldBrush = (HBRUSH) SelectObject (hDc, hbrush);
TextOut (hDc, 0, 0, fontName, wcslen (fontName));
The brush comes from the nativeBrush member of a .NET System.Drawing.Brush, which works correctly both before and after this.
I've tried using DrawText () instead, with the same result. Can anyone point out what I'm doing wrong? Thanks!
"Microsoft -- Adding unnecessary complexity to your work since 1987!"
|
|
|
|
|
Brushes are used to fill the interior of filled shapes. They are not used to draw text.
TextOut() and DrawText() use the text and background colors currently selected by the device context. These can be set using SetTextColor() and SetBkColor() .
SelectObject() returns the object that is going to be replaced. This may be NULL if there is actually no such object selected into the device context. It is not an error condition. The return value is usally used to restore the old state after drawing has been done.
|
|
|
|
|
Hmm... I'm using the same brush to draw text in the .NET half of the application. These are complex patterns (linear gradient and hatch brushes), and the text correctly appears with these textures in GDI+/.NET.
I'm using GDI (no plus) in this part because GDI+ doesn't support OpenType or PostScript fonts (only TrueType).
So how can these patterns be used in text under GDI?
"Microsoft -- Adding unnecessary complexity to your work since 1987!"
|
|
|
|
|
I'm sorry, I don't think that there is a solution with GDI.
|
|
|
|
|
Thanks for the input!
"Microsoft -- Adding unnecessary complexity to your work since 1987!"
|
|
|
|
|
Yeah, it shouldn't be a problem to do what you're asking for.
You need to make use of _both_ TextOut and Paths.
Basically, the process goes like this (sorry code is in a PDF ebook that prevents copy and paste)
1. Create your font
2. Select it into your hdc
3. Call BeginPath(hdc)
4. Call TextOut
5. Call EndPath
6. Use StrokePath for the outline, FillPath for the interior.
7. Select the old font back into the hdc
8. delete your font from #1
Ah! found a CHM version of the same book. Here's the code given there:
(I'll leave it as, unedited, for completeness)
void PaintRoutine (HWND hwnd, HDC hdc, int cxArea, int cyArea)
{
static TCHAR szString [] = TEXT ("Filling") ;
HFONT hFont ;
SIZE size ;
hFont = EzCreateFont (hdc, TEXT ("Times New Roman"), 1440, 0, 0, TRUE) ;
SelectObject (hdc, hFont) ;
SetBkMode (hdc, TRANSPARENT) ;
GetTextExtentPoint32 (hdc, szString, lstrlen (szString), &size) ;
BeginPath (hdc) ;
TextOut (hdc, (cxArea - size.cx) / 2, (cyArea - size.cy) / 2,
szString, lstrlen (szString)) ;
EndPath (hdc) ;
SelectObject (hdc, CreateHatchBrush (HS_DIAGCROSS, RGB (255, 0, 0))) ;
SetBkColor (hdc, RGB (0, 0, 255)) ;
SetBkMode (hdc, OPAQUE) ;
StrokeAndFillPath (hdc) ;
DeleteObject (SelectObject (hdc, GetStockObject (WHITE_BRUSH))) ;
SelectObject (hdc, GetStockObject (SYSTEM_FONT)) ;
DeleteObject (hFont) ;
}
Make it work. Then do it better - Andrei Straut
|
|
|
|
|
Wow, that's some fancy coding! People elsewhere are saying it's impossible. Thanks enhzflep!
"Microsoft -- Adding unnecessary complexity to your work since 1987!"
|
|
|
|
|
You're welcome
Yeah, Charles Pretzold always was a smart cookie.
I'm so glad that I remembered having read a section in his books about the topic.
Make it work. Then do it better - Andrei Straut
|
|
|
|
|
Hi enhzflep,
I incorporated code from your example into my function, and it works with the CreateHatchBrush call to create a new brush.
Unfortunately, when I substitute my already-created brush, it doesn't work; I just get solid white filling the text outlines.
I've verified the brush handle is the same as the nativeBrush member of my .NET Brush, which draws correctly both before and after. Can you see anything I'm doing wrong?
DLLEXPORT void drawWithGdiFont (HBITMAP hBitmap, HBRUSH hbrush, LPCWSTR fontName,
LPCWSTR text, int sizeToUse, bool bold, bool italic, int br, int bg, int bb)
{
HDC hDc = CreateCompatibleDC (NULL);
HGDIOBJ oldObj = SelectObject (hDc, hBitmap);
SIZE size ;
LOGFONT logFont;
::ZeroMemory(& logFont, sizeof(LOGFONT));
wcscpy ((&logFont)->lfFaceName, fontName);
logFont.lfHeight = sizeToUse;
if (bold)
logFont.lfWeight = 800;
else
logFont.lfWeight = 500;
logFont.lfItalic = italic;
HFONT hFont = CreateFontIndirect(& logFont);
HFONT oldFont = (HFONT) SelectObject (hDc, hFont);
SetBkMode (hDc, TRANSPARENT) ;
BeginPath (hDc) ;
TextOut (hDc, 0, 0, fontName, wcslen (fontName));
EndPath (hDc) ;
HBRUSH oldBrush = (HBRUSH) SelectObject (hDc, hbrush);
SetBkColor (hDc, RGB (br, bg, bb));
SetBkMode (hDc, OPAQUE) ;
StrokeAndFillPath (hDc) ;
DeleteObject (SelectObject (hDc, oldFont));
SelectObject (hDc, oldBrush);
DeleteObject (hDc);
}
Also, it seems like the background color here is the second color of the hatch pattern. But how do I set the color between the letters (which is also called the "background color"?)
Thanks!
Alan
"Microsoft -- Adding unnecessary complexity to your work since 1987!"
|
|
|
|
|
Hi,
I am developing a file download utility using MFC. The application downloads a simple file over the internet. During download, is there a way to detect if the network connectivity is lost? Because the CHttpFile->Read function doesn't exit if the connection isn't lost.
Sunil
|
|
|
|
|
sunilkpv wrote: Because the CHttpFile->Read function doesn't exit if the connection isn't lost. Are you saying that it should exit if the connection is not lost?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|