|
Hi,
How can I change the image attribute using gdi+?
I need to change the image size using gdi+.
|
|
|
|
|
|
Hi John,
You can use DrawImage() to rescale images...
Regards,
Spk521
|
|
|
|
|
Image::GetThumbnailImage and Bitmap::SetResolution (see eg. in earlier reply) method are apt for this.
DrawImage() method simply draws the image with given dimension, it doesn't provide option to alter the source image, or to retrieve resized image.
|
|
|
|
|
Im using VS2008.
Im sending data to LED in external device thorugh serial port by given in set of format for glowing LED.
But it show error on Release() in nRef!=0 line.
Actually it works fine in VC6.0Now im converting that to VS2008.
struct SLEDFrame
{
char *idtfr,*Data1,*Data2;
};
SLEDFrame btnLED[] = {
"0x53", "0x30", "0x30",
"0x53", "0x30", "0x31",
"0x53", "0x30", "0x32",
"0x53", "0x30", "0x33",
"0x53", "0x30", "0x34",
};
void CMSCOMMDlg::setLED(int pLEDNo, BOOL pState)
{
BYTE bID, bByte1, bByte2, bState, bCheckSumByte1, bCheckSumByte2;
if (pState)
bState = 0x31;
else
bState = 0x30;
CString tempStr, C1, C2;
tempStr = btnLED[pLEDNo-1].idtfr;
tempStr = tempStr.Mid(2);
sscanf(tempStr, "%x", &bID);
tempStr = btnLED[pLEDNo-1].Data1;
tempStr = tempStr.Mid(2);
sscanf(tempStr, "%x", &bByte1);
tempStr = btnLED[pLEDNo-1].Data2;
tempStr = tempStr.Mid(2);
sscanf(tempStr, "%x", &bByte2);
BYTE bSum = bByte1 + bByte2 + bState;
tempStr.Format("%x",bSum);
C1 = "0x3" + tempStr.Left(1);
C2 = "0x3" + tempStr.Right(1);
sscanf(C1, "%x", &bCheckSumByte1);
sscanf(C2, "%x", &bCheckSumByte2);
CByteArray btArray;
btArray.Add (bID);
btArray.Add (bByte1);
btArray.Add (bByte2);
btArray.Add (bState);
btArray.Add (bCheckSumByte1);
btArray.Add (bCheckSumByte2);
COleVariant var(btArray);
m_Comm.SetOutput(var);
}
The error occurs in
void Release() throw()
{
ATLASSERT( nRefs != 0 );
if( _AtlInterlockedDecrement( &nRefs ) <= 0 )
{
pStringMgr->Free( this );
}
}
Anu
|
|
|
|
|
Why are you using strings? This is slow and pointless.
You should read up on bitwise operations[^] such as shift and AND
struct SLEDFrame {
BYTE idtfr;
BYTE Data1;
BYTE Data2;
};
SLEDFrame btnLED[] = {
{ 0x53, 0x30, 0x30 },
{ 0x53, 0x30, 0x31 },
{ 0x53, 0x30, 0x32 },
{ 0x53, 0x30, 0x33 },
{ 0x53, 0x30, 0x34 },
{ 0x53, 0x30, 0x35 },
}
void CMSCOMMDlg::setLED(int pLEDNo, BOOL pState) {
BYTE bState;
if (pState) {
bState = 0x31;
} else {
bState = 0x30;
}
BYTE bID = btnLED[pLEDNo-1].idtfr;
BYTE bByte1 = btnLED[pLEDNo-1].Data1;
BYTE bByte2 = btnLED[pLEDNo-1].Data2;
BYTE bSum = bByte1 + bByte2 + bState;
BYTE bCheckSumByte1 = 0x30 | (bSum >> 4);
BYTE bCheckSumByte2 = 0x30 | (bSum & 0x0F);
CByteArray btArray;
btArray.Add(bID);
btArray.Add(bByte1);
btArray.Add(bByte2);
btArray.Add(bState);
btArray.Add(bCheckSumByte1);
btArray.Add(bCheckSumByte2);
COleVariant var(btArray);
m_Comm.SetOutput(var);
}
|
|
|
|
|
Can you tell me how can i convert CString to BYTE.
I used
CString C2 = "0x30h"
BYTE bCheckSumByte2 ;
bCheckSumByte2 = (BYTE)(LPCSTR)C2;
But it doesnt work.
Anu
|
|
|
|
|
I would recommend using strtol[^]
CString strNumber = "0x30h";
BYTE nNumber = (BYTE)strtol(((LPCSTR)strNumber) + 2, NULL, 16);
The +2 is to skip over the 2 characters "0x"
The 16 is the base (hexadecimal)
The function returns a long, we need to cast this down to a BYTE
|
|
|
|
|
You cannot convert from string to binary by the use of casts. Casts are used to tell the compiler to treat a variable of type X as type Y; however, no conversion of the variable's content will be done.
I must get a clever new signature for 2011.
|
|
|
|
|
Hi,
I am working on VS 2010, I am getting this error, which I didn't able to solve it inspite of adding the linking file(.lib) in the Project Properties -> Link -> Additional Libraries. I am not getting the error in VS6.
what is the reason for this error? I have searched other forums, one of the suggestion I got is it is bug in VS, you need to rename the file, remove it from the project and add it back. Even though I am not satisfied with the suggestion, I tried it, since I have no other option. But it proved invain, I am getting the same error with the new file as well.
Thanks in advance
Charan
|
|
|
|
|
Linker errors arise due to a mismatch in the function declaration/definition. This is because the linker cannot find the exact definition of the function you are trying to use in your code while linking.
You did'nt mention what linker error you are getting. Is it related to some function that you have written or a function that is in a third party library and you are trying to use it?
Please provide more details.
I am a HUMAN. I have that keyword in my name........
_AnsHUMAN_
|
|
|
|
|
Thanks for the reply, I am getting the error for the same function I have written in the lib.
I am trying to link MFC shared dll to static library, I am getting unresolved error while I am compiling shared dll.
|
|
|
|
|
What is the actual symbol that is unresolved? Also show us the definition of the symbol that is unresolved from the .h or .cpp file (you don't need to show us the code, it makes no difference)
You can try a full rebuild of the project, occasionally the compiler gets a little confused.
Also, it is best to use a library that is compiled with the same version of VS that you are linking from.
|
|
|
|
|
There is one more difference in VC6.0 and VS2010 is that library included in VC6.0 is space separated and VS2010 is semi colon separated. Tried it once.
I believe in LOVE AT FIRST SIGHT...
Bcoz I have loved my Mother...
even since I opened my eyes...(ICAN)
|
|
|
|
|
Yes it is right, I converted the project file using VS10, ';' is added automatically by VS10, I didn't have to worry about it.
Sorry for the late replay, I am using 2 static libraries(say A, B) one is dependent on other. Then I am linking MFC shared dll to these 2 static libraries. The error is, it is not finding the function in B which is called from A, while compiling the shared dll.
Thanks,
Charan
|
|
|
|
|
Hi guys,
Sorry If I am confusing you.
I want tobe more clear what I am saying
I have two static libraries A and B (where A is dependent on B)
Now I am compiling dynamic library, which depends on both A and B.
I am getting the error:
simwfp.lib(SimUserErrDlg.obj) : error LNK2001: unresolved external symbol "public: __thiscall CSimString::CSimString(unsigned short const *)" (??0CSimString@@QAE@PBG@Z)
Thanks,
Charan
|
|
|
|
|
Can you confirm the function definitions/prototypes match in your simwfp.lib and the code where you are using it?
I am a HUMAN. I have that keyword in my name........
_AnsHUMAN_
|
|
|
|
|
Hi,
what I observed is in the declaration and definition the argument of a function is LPTSTR*
but the compiler is checking for unsigned short*. Is this might cause any problem?
Thanks,
Charan
|
|
|
|
|
sorry it is unsigned short**
|
|
|
|
|
Sounds technically ok to me: the typedef of LPTSTR* will resolve to wchar_t** and if you're using wide characters, i. e. a 16 bit character set then that is equivalent to unsigned short**.
But then again, here might be a possible source of an error, namely when you compiled your code with 8 bit character sets and try to link against code for UNICODE or multibyte char sets, which are 16 bit. Make sure all the parts are compiled with the same settings for your char set, and you are using the correct DLLs/LIBs for that char set.
|
|
|
|
|
Hi,
You are right, I am also assuming that the linker is looking for unicode parameter, and it is unable to find. But I am compiling two static libraries and dynamic library(dll) with Use Unicode Character Set property setting. And I am getting all the errors for the function which is having a parameter unsigned short ** and the function definition containing LPTSTR
Thanks,
Charan
|
|
|
|
|
Thanks for your support, I am missing the setting wchar_t as built in type 'Yes'. This resolved my errors.
|
|
|
|
|
Ok, here is a thing and a playground is C DLL. In a class, i am allocating some memory
(with malloc / HeapAlloc) and copying
some data to it. The this data is returned to a function (which is outside the class), then
this function passes this data to a dll export function, which exports this data to a C#
application. So, as you can see, it is a long way. The question is, what i should do about
that memory, allocated in a class in a dll? I think i should free it somehow, should i?
And all this memory operation thing is kinda complexed, there are pointers to pointers to
pointers to pointers, "destroying" one will corrupt everything on the way forward, so its like
a chain or something. Or should i do something like: write a function (inside dll), which
frees memory after data export, and then, after importing data in an app, call this function?
Thanks.
011011010110000101100011011010000110100101101110
0110010101110011
|
|
|
|
|
The thing is you have to be careful to free it from the same heap as it's allocated on, or you'll end up in trouble. The general answer to this is to make the module (DLL) that allocated the memory free it. There are many ways to do this but something like this is typical:
Stuff* MakeSomeCrap()
{
Stuff *pStuff = new Stuff();
return pStuff;
}
void FreeStuff(Stuff *pStuff)
{
delete pStuff;
}
Steve
|
|
|
|
|
C# will only free memory allocated by the .net environment. This means that you must free any data that your DLL allocates to avoid memory leaks.
If the data is allocated within the DLL, then it should be freed from the DLL, this is not only good style, but necessary in most cases as the DLL will have a different heap which it allocates from.
You should make a member function of the class to free the memory if possible, however there are many situations where this is not possible when dealing with multiple languages, you can simply export a standard function which calls free or HeapFree from within the DLL.
|
|
|
|
|