|
WOW thanks good catch I didn't see however where the storage was initialized to 9 let me try
thanks
|
|
|
|
|
|
You are welcome.
Did you really need to use raw (C -like) arrays and new ?
|
|
|
|
|
I am MainFrame programmer by trade wasn't sure how to copy the first 8 characters of the 45 character strings
Thanks
|
|
|
|
|
I missed that twice in the original thread below. Well spotted.
|
|
|
|
|
Thank you, Richard.
|
|
|
|
|
Hi
I Decided to start a new thread because for a moment I thought I had fixed my problem of the Disappearing list with the following code
I added a point to an array pointer for the strings I wanted to add
class Casidcombo : public CComboBox
{
DECLARE_DYNAMIC(Casidcombo)
private:
int cright, cbottom, ctop;
public:
Casidcombo();
~Casidcombo();
char **arrayptr;
protected:
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
virtual void DrawItem(LPDRAWITEMSTRUCT pdi);
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
DECLARE_MESSAGE_MAP()
};
its the arrayptr not knowing exactly how may entries I would have I initialize it in the
OnInitDialogBox of the the Hosting Dialog
m_Simple.arrayptr = new char *[j+1];
for (int i = 0; i < j + 1; i++)
m_Simple.arrayptr[i] = NULL;
In the DrawItem For The Combobox I copy of over part of the string
if(arrayptr[pdi->itemID] == NULL)
arrayptr[pdi->itemID] = new char(9);
memset(arrayptr[pdi->itemID], 0x00, 9);
memcpy(arrayptr[pdi->itemID], lpszText, 8);
I then write it out
dc.DrawText(
arrayptr[pdi->itemID],
8,
&pdi->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
The list now re-appears After I try closing out the Dialog by clicking on the 'X'
in the right hand Corner
I guess this drives the DrawItem function
My question is after appearing and disappearing initially (the list) of the ComboBox the vertical scroll bar is missing as well until I clisk on the 'X' in the right hand corner after which everything re-appears I guess that most Drive DrawItem I am still Baffled Why initially it disappears along with the scroll bar
This the last piece of code in the OnInitDialog
ShowWindow(SW_SHOW);
ShowWindow(SW_SHOW);
return TRUE;
This is my message map I only have a Measure Item Message
BEGIN_MESSAGE_MAP(Casidcombo, CComboBox)
ON_WM_MEASUREITEM()
END_MESSAGE_MAP()
modified 4-Dec-18 22:16pm.
|
|
|
|
|
I have used user drawn ListView controls without problem in the past. I notice that you are using a CDC to draw the text in the view rather than responding to the notification messages and returning the relevant data. However, my sample does not use MFC so I may well be on the wrong track.
|
|
|
|
|
Richard there are two api in DrawItem that are not supported in Native Win32 FillSolidRect only thing close is FillRect which takes a brush
Regardless I was getting a heap corruption so I ran my code in debug with the following
#if _DEBUG
afxMemDF = allocMemDF | checkAlwaysMemDF;
#endif
and at exiting DrawItem got the following
#if defined _NO_CRT_STDIO_INLINE
;
#else
{
int const _Result = __stdio_common_vsnprintf_s(
_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS,
_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList);
return _Result < 0 ? -1 : _Result;
}
#endif
Exiting DrawItem I am getting a heap corruption
|
|
|
|
|
You need to actually trace the code to see where the heap is getting corrupted. It is usually caused by writing too many bytes into an allocated buffer. Notice that __stdio_common_vsnprintf_s takes two values which indicate the length, so one of them could be wrong.
|
|
|
|
|
I Did but I don't understand why
I am getting a list of Addreess Spaces information from z/os I only want to Add the the list box the Job Name. Asid information is 45 bytes the first 8 is the JobName. So the First would be *Master*
I moved the code which copies the first 8 charcates from CComboBox::DrawItem to the DialogBox
just got Debug Assert on the AddString I think I am doing everything right;
m_Simple.arrayptr = new char *[j+1];
traverse = instr;
for (int i = 0; i < j + 1; i++)
{
m_Simple.arrayptr[i] = new char(9);
memset(m_Simple.arrayptr[i], 0x00, 9);
memcpy(m_Simple.arrayptr[i], traverse, 8);
m_Simple.AddString(m_Simple.arrayptr[i]);
traverse = (char *)traverse + 45;
}
The twisted Arrow after the Debug Heap Assertion is pointing to
traverse = (char *)traverse + 45
So I guess there is a problem with AddString
Not sure what I am doing wrong
|
|
|
|
|
I can only assume that your instr variable does not contain the number of 45 character fields that you think. However only the debugger could confirm that.
|
|
|
|
|
I am getting
undefined reference error.
I have "included " relevant headers in souce files , I have "common path" in project includes (/usr/include /bluetooth ) ,
I can access "Open Declaration" in my IDE and it identifies function and its file...
I have no errors indicating missing
bluetooth/hci_lib.h in text file...
What did I missed??
<pre>
#ifndef MODULES_M_BT_H_
#define MODULES_M_BT_H_
#include <iostream>
#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
C++ function
<pre>int C_BT::Scan(void) {
cout << "C_BT::Scan(void) " << endl;
int device_id = hci_get_route(NULL); if (device_id < 0) {
printf("Error: Bluetooth device not found");
exit(1);
}
return 0;
}
Error
./src/MODULES/M_BLUETOOTH/CBT.o: In function `std::C_BT::Scan()':
/media/jim/DEV/eclipse-workspace/VNAR_1204/Debug/../src/MODULES/M_BLUETOOTH/CBT.cpp:42: undefined reference to `hci_get_route'
collect2: error: ld returned 1 exit status
makefile:75: recipe for target 'VNAR_1204' failed
make: *** [VNAR_1204] Error 1
Can I get a second opinion ?
Cheers
Vaclav
|
|
|
|
|
At a guess it's a C file and you are dragging it into a C++ file and getting splattered by name mangling
Name mangling - Wikipedia[^]
The two solutions are in the above link under Handling of C symbols when linking from C++
Check are the bluetooth library files C or C++
If C the easiest is probably include all the C header files like so
extern "C" {
#include <bluetooth/hci_lib.h>
}
In vino veritas
|
|
|
|
|
Leon,
you are close, it is C file , but...
It has ( or SHOULD HAVE (?) ) __cplusplus defined and
that should make it work in C++
So where do I check if __cplusplus id actually defined ?
#ifndef __HCI_LIB_H
#define __HCI_LIB_H
#ifdef __cplusplus
extern "C" {
#endif
I'll take a look what else can be "fixed" to make it go.
|
|
|
|
|
Did you forget to include a .lib file in your build?
|
|
|
|
|
You're not actually linking in the bluetooth library.
|
|
|
|
|
I was not trying to use any library - just source.
|
|
|
|
|
Perhaps this answer on SO is it: bluetooth - Linking with libbluetooth.so - Stack Overflow[^]
(In the past, I got bit by the gcc link order thing several times.)
Alternatively, you are missing some files. Search the source you have for hci_get_route. (The point is that the linker isn't seeing this symbol.)
|
|
|
|
|
Here is an indirect answer
"None of the function definitions are present in the header files: just the declarations. The definitions are in the library"
Make sense. Somewhat.
But "definitions are in library" ?
(Perhaps some A..no affectionado wrote the "library" )
What does not make sense - the example code I am using which was already been refereed too said zilch about need to use the library nor does it even mention the name of the library.
Perhaps it is obvious to experts that library has to be linked in.
But what the dickens is " compiled against (library)" ?
This nameless library (?) is probably different for each hardware too.
|
|
|
|
|
Vaclav_ wrote: But what the dickens is " compiled against (library)" ?
It's a way of saying, build using that library.
Based on this "apt-get install bluez libbluetooth-dev" (from tutorials:common:development:bluez_programming [CubieBoard Docs][^]) suggests it's part of the bluez package.
Added: I checked the Debian repository and the package list and contents supports this.
modified 5-Dec-18 0:54am.
|
|
|
|
|
Found this procedure , for Eclipse IDE, which puts difffernt spin onto the problem.
To me it implies that linker can use "source" instead of library.
To use the latest Bluetooth kernel modules is one important thing, but without support from the user space these modules are useless. For the minimal functionality the bluez package is needed.
bluez-5.50.tar.xz
2. Copy and paste the extracted folder (named something like bluez-5.31) to the usr\include folder.
3.
4.
5. The path to usr\include folder may look something like this C:\Intel\iotdk-ide-win\devkit-x86\sysroots\i586-poky-linux\usr\include
6. Now on Eclipse (assuming your project is open) add the linker flags for your project. On Eclipse's menus select Project>Properties>C/C++ Build>Settings>Tool Settings>Cross GCC Linker>Miscellaneous, add the flag "-bluez-3.1" and click OK.
Note: This flag is basically a "-" character concatenated with the name of the bluez folder.
4. Edit the header calls on your main file; add the path to where the header files needed are. In this case bluetooth.h, hci.h and hci_lib.h are inside bluez 5.31, header calls should look something like these:
#include "bluez-5.31/bluetooth.h"
#include "bluez-5.31/hci.h"
#include "bluez-5.31/hci_lib.h"
5. Proceed to save (Ctrl + S) and Build Project.
Unfortunately Linux / Eclipse (?) won't let me add the "extracted folder" into /usr/include - need permission.
I added full path to my Bluez-5.50 and linker did not complain about that but the overall result was - now getting more errors.
I am going to look into linker "miscellaneous " options to see what is missing.
Note
the /usr/include has folder "bluetooth" which contains the needed headers.
That works fine. I have no idea how it got there.
|
|
|
|
|
As I have explained to you a number of times, header files are only used to compile your source code. That is, to convert source instructions to object code instructions. But the output of the compiler is not complete, it needs other object modules linked to it in order to execute. That is where the associated libraries come in. They need to be added to the link step so the final executable includes the code you wrote and the pre-built libraries that contain the functions that your code will be calling.
|
|
|
|
|
Plz Help Me, I am trying to make a school project which is a search engine that takes input from the user and searches the entered word or sentence within the files available. There's no compile error in the program but the program is not searching correctly the file which has the data. If the entered string matches any sentence or string in the file stored then it should display the result.
But the problem is that the strcmp or stricmp or any function which searches for a match is not working.
I am using it with if & else statement for now... If the string is in the file then it should show found else not found but it only works if there is only one word in the file. If the file which is to be searched has lots of data off course in the text format it always shows not found but if it has only one word then it says found. Plz help Me If You Can.
Also plz tell me how can i do the same thing which is to search for a particular entered word in more than one file like for example 10-20 files and then after searching it should display the whole line in the file or (files) found. Thanks For Your Help In Advance. I appreciate it !
Here's the code for searching the word in one file.
Plz also tell me how to search for the entered word in multiple files.
void search()
{
char str2[100];
char str[100];
cout<<"write some text to search:";
gets(str);
ifstream i;
i.open("stud.txt");
while(!i.eof())
{
i>>str2;
if(stricmp(str,str2)==0)
cout<<"found !";
else
cout<<"not found !";
}
getch();
}
|
|
|
|
|
Edit your post and add what (the code) you have tried.
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
|
|
|
|