|
I have written a .NET assembly that I want to use in MFC 6.0. According to an MSDN article[^], I need to use the Regasm.exe to make the necessary entries in the registry. I have gone ahead and done this using the following command to create a type library as well:
regasm mcpp.dll /tlb:mcpp.tlb
From what I understood, I then needed to reference the type library that is created one of two ways:
#import "mcpp.tlb" raw_interface_only
or
#import "mscorlib.tlb"
#import "mcpp.tlb"
I have done this however as soon as I try to compile following this it throws a slew of error within either mcpp.tlb or mscorlib.tlb , depending on which item I try (as I have tried both methods). Does anyone have any experience doing anything of this nature. Thanks
Nick Parker
Not everything that can be counted counts, and not everything that counts can be counted. - Albert Einstein
|
|
|
|
|
Hi,
I need to output some CString data after I've copied it to a char array (ie: char ptrSomeCharArray[33]). I can't seem to get the data extracted from the CString object.
I've tried:
CString m_sFullname("Like2Byte"), m_sAccount("12345678"), m_sRoom("222");
char SomeCharArray[33];
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sAccount);
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sRoom);
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sFullname);
While this compiles without error, inserting it into a
MessageBox function displays garbage. Even wrapping the var in TEXT() doesn't work. I've also tried casting using LPCTSTR, LPTSTR and (const char*). None work correctly.
Anyone help out?
|
|
|
|
|
Have you tried e.g. sprintf( SomeCharArray + strlen(SomeCharArray), "%s", m_sAccount.GetBuffer(0)); ?
But err, what does the sprintf do? Do you want to append the CString to SomeCharArray? You should use strcat instead
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Well, I tried m_sAccount.Mid(0) but that gave me the same results are m_sAccount.
Let me try your suggestion.
(The 'In a nut-shell' explination)sprintf basically copies whatever kind of data to end of another string converting it to a string when it's all done.
say, SomeCharArray contains "HelloWorld" and someIntValue = 32768.
Therefore, sprintf(SomeCharArray + strlen(SomeCharArray), "%i", someIntValue); copies 32768 to the end of SomeCharArray; thus, leaving, "HelloWorld32768".
(BRB)
|
|
|
|
|
Any time you use a string object (CString or any other string wrapper class) with the printf family of functions, you need to cast the object to a pointer type, so that only the pointer is put on the stack.
sprintf( SomeCharArray + strlen(SomeCharArray), "%s", (LPCTSTR) m_sAccount); But as Gregor said, the real bug in your code is how you construct the string in the first place. Just use one sprintf() call.
--Mike--
Friday's GoogleFight results: Britney Spears 2,190,000 - Erica Weichers 23
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Of all the places I put (LTCTSTR), I *don't* think I placed it right there.
(BRB)
|
|
|
|
|
You can use strcpy, like this:
strcpy(SomeCharArray, m_sAccount + m_sRoom + m_sFullname);
However, you need to be careful that the length of the 3 variables does not surpass the size of SomeCharArray - 1.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
yeah, thats the method I would use. Nice and easy
|
|
|
|
|
You need to initialize SomeCharArray to an empty string, either via
SomeCharArray[0] = '\0'; or
strcpy(SomeCharArray,""); otherwise, you're concatenating at an arbitrary location in the string. Another way to do this would be
sprintf("%s%s%s",m_sAccount,m_sRoom,m_sFullname);
Software Zen: delete this;
|
|
|
|
|
Try this :
CString str="Hello";
char *pStr=str.GetBuffer(0);
Thsi should return a pointer of type char representing the string content, always works for me.
Shay
|
|
|
|
|
Well, I appreciate *everyones* help.
I also went over to CodeGuru and found this other method.
Again, thanks.
|
|
|
|
|
I have a CListCtrl in report mode with checkboxes. With several lines of data I can check/uncheck the check boxes without shifting the selection or getting any update other than an ItemChanged update. I need the checkbox change to be reflected back and set the current selection to the item changed. How do I do this?
I have tried to handle it in the OnItemChanged but I get some really bizarre behaviour.
Dave Huff
Igor would you give me a hand with the bags?
Certainly - you take the blonde and I'll take the one in the turban!
|
|
|
|
|
|
Nope it doesn't.
It tells me how to use GetCheck and SetCheck but it doesn't tell me how to pick up on the change as it is being done.
I am also having a problem similar to one described a few posts down where I have the element selected and when I hit the down key it places me back to the first element in the list. But when I hit the up arrow it works just fine!
Thanks
Dave Huff
Igor would you give me a hand with the bags?
Certainly - you take the blonde and I'll take the one in the turban!
|
|
|
|
|
Here's some very old code I dug up that handles this. I don't remember how it works -- that's how long it's been -- but I hope it helps.
void CMyDlg::OnItemchangedListParts(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
if (HasCheckboxChanged(pNMListView))
UpdateControls();
}
bool CMyDlg::HasCheckboxChanged(NM_LISTVIEW* pNMListView, bool* pbChecked = NULL) const
{
ASSERT(pNMListView);
if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
return false;
BOOL bPrevState = (BOOL)(((pNMListView->uOldState & LVIS_STATEIMAGEMASK)>>12) - 1);
if (bPrevState < 0)
bPrevState = 0;
BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12) - 1);
if (bChecked < 0)
bChecked = 0;
if (pbChecked)
*pbChecked = !!bChecked;
return (bPrevState != bChecked);
}
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
Just the ticket!
And I figured out the resetting to first index problem too!
Thanks
Dave Huff
Igor would you give me a hand with the bags?
Certainly - you take the blonde and I'll take the one in the turban!
|
|
|
|
|
I have some code as follows, to change the text and
background color of the currently selected text in a
control based on RichEdit 2.0.
------------------------------------------------------
CHARFORMAT2 cf;
unsigned int cfSz = sizeof(cf);
cf.cbSize = cfSz;
SendMessage(m_hWnd,EM_GETCHARFORMAT,(WPARAM)SCF_DEFAULT,
(LPARAM)&cf);
cf.crBackColor = RGB(255,0,0);
cf.crTextColor = RGB(0,0,0);
cf.dwMask |= CFM_BACKCOLOR | CFM_COLOR | CFM_LINK ;
if ( cf.dwEffects && CFE_AUTOBACKCOLOR)
cf.dwEffects -= CFE_AUTOBACKCOLOR;
if ( cf.dwEffects && CFE_AUTOCOLOR)
cf.dwEffects -= CFE_AUTOCOLOR;
cf.dwEffects |= CFM_LINK ;
SendMessage(m_hWnd,EM_SETCHARFORMAT,(WPARAM)SCF_SELECTION,
(LPARAM)&cf);
-------------------------------------------------------
however the selected text defaults to blue and is
underlined becuase of the CFM_LINK flags and overrides the
BackColor and TextColor I've set for the characters.
Is it possible to override Richedit's default displaying
of characters that have the CFM_LINK flags set? I haven't
been able to find any documentation on this but believe it
should be possible??? Any insight is appreciated.
Thanks in advance.
|
|
|
|
|
Why is it taking for my project so long to load....
I have a nice chunky project but still, it can take up to 2 minutes to load the whole workspace, any way to shoten it ?
Thanks
Shay
|
|
|
|
|
You mean if you doubleclick on a *.dws or *.vsproj file or open it from inside VS?
Actually this takes no more than 10 seconds for small project.
How big is your project? (count of files, classes ect.)
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Yes, double click on DSW on File->open
I have around 30 classes but I don't thin that should limit the speed, do you ?
|
|
|
|
|
It might be due to the "one-million breakpoints" problem. Bring up your breakpoint dialog and check if there's a heap of them set ( usually duplicates. ) Remove them and see if it helps.
Option 2:
If you don't use the class-view info, ( sounds limiting, but it doesn't have to be ),
you delete your project NCB file, create an empty one and make it write-protected.
It will speed up things, at the cost of not having the class-info available.
-=jarl=-
|
|
|
|
|
Where is this "Break point dialog" ?
Shay
|
|
|
|
|
hit Ctrl-B in the editor window, ( VC 6 ), or hit Ctrl-Shift-F9 to clear all, ( VC 7 )
-=jarl=-
|
|
|
|
|
Where do I get the "Break point" dialog ?
|
|
|
|
|
COOOOOOOOOOOOOOOLLLLL !!!!
I just found the dialog and removed all of them, and man, It works !
Thank you !
Shay
|
|
|
|