|
the Q is from java.
java's jdb.exe uses shared memory with an user's name (i.e. my_memory), now i want to access this memory in C++.
where is start point? any comments?
thx
includeh10
|
|
|
|
|
You will have to use JNI calls for doing this.
I had a similar problem, and I made the java pgm create a piece of shared memory, and from C++ I used shmget function to access it. But shmget failed from either side ( depending on which one creates the shared mem ).
Anyway you can start exploring with "JNI" calls.
You may find this piece of code useful.
JNIEXPORT jint JNICALL Java_posix_SharedMem_shmget
(JNIEnv *, jclass, jint key, jint size, jint flag) {
return shmget(key,size,flag);
}
"A robust program is resistant to errors -- it either works correctly, or it does not work at all; whereas a fault tolerant program must actually recover from errors."
|
|
|
|
|
i never use jni before, i only tried pipe but it doesn't work.
could u send real code to my email?
thx
includeh10
|
|
|
|
|
Hi. I have a program that allows a user to select a file and the user presses the Ok button, the program will write out an exe and store or copy the file together with the newly created exe. When the user runs the newly created exe, it will run the file when it presses a button on the exe.
I managed to create the exe already. I now need to solve the storing problem. I tried using the zip and unzip method, but it only unzip it to another folder and not excute it. So how can I go about doing this?
|
|
|
|
|
possible u can store it in "resource" part of an exe.
see how to modify resource of an exe in vc help.
includeh10
|
|
|
|
|
I understand what you mean. But my file might keep on changing. So how can I update the resource for the file in the first place?
|
|
|
|
|
You can use the concept of Self Extractors
See this url :
http://www.codeproject.com/file/self_extractor.asp
"A robust program is resistant to errors -- it either works correctly, or it does not work at all; whereas a fault tolerant program must actually recover from errors."
|
|
|
|
|
I'm writing an SDI application and I cannot get the name of the app that appears in the list box on the system toolbar to change (in winxp when you open the same app many times , he groups all of them on one button with a list box, and the text that is written on it is TODO: <File Description> . I have looked at the document, view, app, and frame titles but none of them change it. The only place that i found this string, was in the resources (versioning), but if i change that, nothing happens .
For projects that are imported from vc6 it writes the name of the app that you gave when you have created the project, but I don't know from where to change it, i did a search and replaced it everywhere where it appears but it doesn't change the text that appears on that button. do you have the same problem, or just i have it ?
If anyone knows how to fix this using VC7 I would greatly appreciate it.
|
|
|
|
|
Hi,
Im trying to create a self extracting file. I have managed to do it for my home computer by getting the program to open a file pointer to its own exe file, but when i do this on other computers, I get a sharing violation. Is there a way around this?
Cheers
|
|
|
|
|
When I pass this pointer from Vb to C++ the value is not recieved. The pAcct variable always has the same value (0x0012fadc). If I change the C++ function so that it merely asks for a long value, or int, or even a BSTR, as an argument, the same thing happens (0x0012fadc). But, if I create the Account object in C++ and pass a pointer OUT to VB, that works fine. Or, if I take the value printed by the message box (0x0014F9F0), and copy that into pAcct after control has entered the GetAccount routine, everything works (the value printed from VB is valid). Its very perplexing.
Thanks for whatever advise you can give!
VB Code
<br />
Private Declare Function GetAccount Lib "C:\...\DataAccess.dll" (ByVal ptr As Long)<br />
<br />
Private Sub Form_Load()<br />
Dim Account As clsAccount<br />
Dim ptr As Long<br />
<br />
Set Account = New clsAccount<br />
ptr = ObjPtr(Account)<br />
MsgBox Hex(ptr), vbInformation <-- Prints the following value - 0x0014F9F0<br />
GetAccount ptr<br />
Label1.Caption = "Account Name = " & CStr(Account.AccountName)<br />
End Sub<br />
C++ Code
<br />
extern "C" void __stdcall GetAccount(_clsAccount* pAcct) <-- recieves the value 0x0012fadc<br />
{<br />
HRESULT hr = CoInitialize(0);
if (SUCCEEDED(hr))<br />
{<br />
_bstr_t bstr1(_T("TestInfo"));
pAcct->put_AccountName(bstr1); <-- causes access violation error <br />
CoUninitialize(); <br />
}<br />
}<br />
ANY suggestions will be IMMENSELY appreciated!
Thanks
|
|
|
|
|
Instead of getting the pointer to you object and then sending the pointer value 'ByVal',
why don't you just send a reference to the object?
rajdawg wrote:
Private Declare Function GetAccount Lib "C:\...\DataAccess.dll" (ByVal ptr As Long)
Private Declare Function GetAccount Lib "C:\...\DataAccess.dll" (ByRef ptr As Long)
rajdawg wrote:
Set Account = New clsAccount
ptr = ObjPtr(Account)
MsgBox Hex(ptr), vbInformation <-- Prints the following value - 0x0014F9F0
GetAccount ptr
Set Account = New clsAccount
GetAccount Account
VB by default uses Byref params
BTW I've never tried passing a class from VB to C. I wasn't sure it was possible. Structs, yes, but classes, with their code sections and all?
"It was when I found out I could make mistakes that I knew I was on to something."
-Ornette Coleman
|
|
|
|
|
Thanks for your reply.
I couldn't get that to work either. I received a ByRef Type Mismatch message from VB.
I have also seen an example where the decare statement would look like this...
<br />
Private Declare Function GetAccount Lib "C:\...\DataAccess.dll" (ByVal Account As Any)<br />
and the function call, in VB, would look like:
<br />
GetAccount Account<br />
but that does not work either.
I think you are right. I may need to build a structure that will represent this object in C++, and go that route. I'll keep researching.
Thank you for your response. This is very interesting/frustrating/humbling stuff.
thanks again.
roger
|
|
|
|
|
how to get the number of digits after the decimal point
ex :
Input : 5.1234
Expected Output : 4
i wrote this code but there are wornings..
what is wrong here ??
double input;
int x=input; // so x=the integeral part of input
int y=input-x; // so y=the fractional part
while(y>0)
{count++;
input*=10;
x=input;
y=input-x;
}
plz help me !!
elmahdy
|
|
|
|
|
you won't get the fractional part in y because it is an int.
|
|
|
|
|
I'm guessing there are a lot of ways to do this. How about this!
double input;
int Num = static_cast< int >( input );
intput -= static_cast< double >( Num );
You should now just have the .XXXX
Char szData[1024];
ssprintf( szData, "%f", &Input );
int iLengt = strlen( szData ) - 2; //For the zero & the '.'
This can give you a start.
Larry J. Siddens
Cornerstone Communications
TAME THE DOCUMENT MONSTER
www.unifier.biz
|
|
|
|
|
Any one know if it’s possible to change or add to the environment variables of the calling process?
I know it's really easy to change the current processes env vars, and child process env vars...
Thanks,
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
I don't think it is possible. What a you trying to do?
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
I am trying to write a console executable that can be used in a batch file to change the environment vars of the batch file depending on user input and or contents of a text file.
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
Hi,
I'm trying to add a submenu into the Main File Menu, and I want to populate the submenu dynamically. But, I'm getting an error on AppendMenu() at runtime.
Here is what I'm doing:
CMenu* menu_bar = AfxGetMainWnd()->GetMenu();
CMenu* file_menu = menu_bar->GetSubMenu(0);
for (int iCount =0; iCount<maximum ;="" icount++)
{
if="" (!uniquehierarchyname[icount].isempty())
{
hierarchysubmenu.appendmenu="" (mf_string,="" id_base_command="" +icount,="" uniquehierarchyname[icount]);
}
}
file_menu-="">AppendMenu (MF_POPUP, (UINT)HierarchySubmenu.m_hMenu, "&Add Hierarchy from Submenu");
|
|
|
|
|
When should I return an error code instead of throwing an exception and vice versa?
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
That is such a massive issue. If you are making a C++ program returning error codes is dumb because you need to return something sensible in proper OO design.
I recommend you buy yourself a C++ book because almost any is bound to have a long description with example code.
I say: never return an error code. With the exception of int main() of course
dog_spawn
http://www.hatekill.com[^]
|
|
|
|
|
dog_spawn wrote:
recommend you buy yourself a C++ book
I do have one. But doesn't say when to use exceptions
dog_spawn wrote:
I say: never return an error code. With the exception of int main() of course
Is that real OO? Cool, I'll see what I can do with my class framework I'm current designing.
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
Get into the habit of handling errors via exception handling. Here's more.[^]
Regards,
Alvaro
Hey! It compiles! Ship it.
|
|
|
|
|
Great! Thaks alot for clearing things up!
Rickard Andersson
Here is my card, contact me later!
UIN: 50302279
Sonork: 37318
Interests: C++, ADO, SQL, Winsock, 0s and 1s
|
|
|
|
|
Exceptions are for truly exceptional errors. Like the file you are working on has suddely disapeared, or you cant get enough memory etc. That Kind of things that you can never be sure when it happenes.
Return code , to the contrary are the everyday case of an error: All those stuff you know that can happen, but your routine can't cope with on itself, like a file can not be opened, user gave your parser too few arguments, the file format of your data is not as expected etc.
All this are things that happen quite often, and you can think of them easily, but your routine must rely on its caller to solve them (e.g. query the user, something your file-handling routines should do, as they are not part of the GUI).
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|