|
Hi,
are you sure you both the lib and exe are in /clr:pure? If the exe is /clr:pure and the lib is /clr, then it is possible that the whole program runs 20-30x slower. This is because of thunking between managed and native world, data type marshalling etc. It gets even worse when many functions are called in managed world (which is usual in image processing).
What you can do is compile your c++ functions in a DLL as native, and then just call 1 function from managed C++.
I'm also doing image processing, and am interested to know more.
|
|
|
|
|
thanks for your suggession.
I already created a DLL in naive code and importing a function to my GUI and used P/Invoke to call this function from GUI. It is much better but not yet perfect. It is 2 to 3 times slower now when comparing to the win32 console application.
Somebody suggested me to call the function in a seperate thread which I will try.
There might be some messsage pump working between GUI(Winform application) and native dll when I called the function.
If you have any other suggessions then let me know.
thank you again.
|
|
|
|
|
when i Serialize Object in My Application int the FileStream I can't
Deserialize FileStream in Other Application . so
how To Serialize Object in fileStream into My Application And Deserialize FileStream in other Application
|
|
|
|
|
What's not working? Code?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Snippet of the code not working could help us see where the problem may be...
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
In other Application When Deserialize Object
errror : i can't find assembly Application name
|
|
|
|
|
in Serialize Application :Project Name = AppSerialize
//////////////////////////
Image ^image=Image::FromFile(file)
FileStream ^file=gcnew FileStream(...)
BinaryFormatter ^formatter=gcnew Binaryformatter;
formatter->Serialize(file,image);
////////////////////////////////////////////
In deserialize Application : Project Name =AppDeserialize
Image ^image....
FileStream ^file=gcnew FileStream(FileSerialize)
BinaryFormatter ^formatter=gcnew Binaryformatter;
image=(Image ^)formatter->Dererialize(file);
///////// Error In Deserialize
error : can not find assembly AppSerialize and .......
|
|
|
|
|
Did you ever get this working?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I can Serialize And Deserialize In One Application .
i workinn Server And client Application so i need Send Struct to Client
when i serialize Struct and Send , in client Application can't Deserialize Struct
|
|
|
|
|
The problem is, the same assembly needs to be used to deserialize as the one that serialized it.
There's ways around this though, if you don't want to keep a separate assembly to maintain
on both ends.
Please post the EXACT exception message (entirely) and I'll show you an example...If you'd like.
You can get the message from the exception by wrapping your deserialize code in a try block and
adding something like
...
catch ( SerializationException^ e )
{
Console::WriteLine( "Failed to deserialize. Reason: {0}", e->Message );
}
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
in SerializeApp :
[SerializableAttribute]
ref struct MyStruct
{
int n;
int j;
};
MyStruct ^my=gcnew MyStruct;
my->j=1;
my->n=1;
FileStream ^file=gcnew FileStream("c:\\Test.dat",FileMode::Create);
BinaryFormatter ^formatter=gcnew BinaryFormatter;
formatter->Serialize(file,my);
///////////////////////////////////////////
In DeserializeApp :
FileStream ^file=gcnew FileStream("c:\\Test.dat",FileMode::Open);
BinaryFormatter ^formatter=gcnew BinaryFormatter;
try
{
MyStruct ^my=(MyStruct ^)formatter->Deserialize(file);
}
catch (SerializationException^ e)
{
textBox1->Text=e->Message;
}
Error:
Unable to find assembly 'SerializeApp, Version=1.0.2987.23837, Culture=neutral, PublicKeyToken=null'.
|
|
|
|
|
|
Good article Giorgi!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks Mark
|
|
|
|
|
|
You are welcome
|
|
|
|
|
When I Seriliaze Object In the File how To save Assembly Name And Typename with My self
|
|
|
|
|
Hi,
I'm using a commandbox for the user to select commands and they pass these commands to a listbox and therefore whatever commands in the listbox are ran when the user clicks on "Run Commands" button.
The problem is if more than one command in the list box then only the first command is ran. If I try to add a queue behind the listbox then the program crashes.
Anyone have any ideas to solve this problem?
Cheers
<br />
<br />
if(lstCommands->Items->Count >0)<br />
{<br />
if(lstCommands->Items->Contains("Move forward")) <br />
{ <br />
this->lstLogCommands->Items->Add(numLog + " Move forward");<br />
}<br />
else if(lstCommands->Items->Contains("Move Back"))<br />
{<br />
protocol_test(3);<br />
this->lstLogCommands->Items->Add(numLog + " Move Back");<br />
}<br />
else if(lstCommands->Items->Contains("Turn Right"))<br />
{<br />
protocol_test(4);<br />
this->lstLogCommands->Items->Add(numLog + " Turn Right");<br />
}<br />
else if(lstCommands->Items->Contains("Turn Left"))<br />
{<br />
protocol_test(5);<br />
this->lstLogCommands->Items->Add(numLog + " Turn Left");<br />
}<br />
<br />
numLog++;<br />
}<br />
else if(lstCommands->Text->Empty)<br />
{<br />
MessageBox::Show("No Commands selected","NoCommands",MessageBoxButtons::OKCancel,MessageBoxIcon::Exclamation);<br />
}<br />
}<br />
<br />
<br />
queue <int> q;
int i;<br />
while (lstCommands->Items ->Count >> i)<br />
q.push(lstCommands->Items->Count >> i);<br />
while (!q.empty())<br />
{<br />
cout << q.front() << " ";<br />
q.pop();<br />
</int>
|
|
|
|
|
gman2008 wrote: queue q; //queue int q - int brackets round it
Does that mean
queue<int> q;<br /> ? If so you really need to figure out how to post code before you try to get us to decipher it.
is this also a posting mistake?
gman2008 wrote: while (lstCommands->Items ->Count >> i)
because if you really have a right shift operator there then I guess you have no idea what you are doing. You need to go read some documentation on the '>>' operator[^]
led mike
|
|
|
|
|
It is hardly to find article or information on c++/cli .net asynchronous socket programming. I even cannot find a piece of it on internet. Any have it? Most i can find is in c#.
When i try convert and use this code as below:
m_mainSocket->BeginAccept(gcnew AsyncCallback(OnClientConnect), null);
AsynCallback^ pfnWorkerCallBack = gcnew AsyncCallback(OnDataReceived);
it show error like this:
error C3867: 'ServerChat::Form1::OnClientConnect': function call missing argument list; use '&ServerChat::Form1::OnClientConnect' to create a pointer to member (i try put full function prototype onClientConnect(IAsyncResult^ asyn) but still error)
error C3867: 'ServerChat::Form1::OnDataReceived': function call missing argument list; use '&ServerChat::Form1::OnDataReceived' to create a pointer to member
error C3350: 'System::AsyncCallback' : a delegate constructor expects 2 argument(s)
error C2065: 'null' : undeclared identifier
other errors just same with those listed. Help pls...
modified on Wednesday, March 12, 2008 11:09 PM
|
|
|
|
|
Member 4542272 wrote: it show error like this:
error C3867: 'ServerChat::Form1::OnClientConnect': function call missing argument list;
see if this helps[^]
led mike
|
|
|
|
|
Hey mike, i did find and read articles often but problem is i cannot find any relevant information or solution. Thx for your reply but this help ntg.
|
|
|
|
|
Also, those C# articles can be helpful - The .NET framework is the same - so is the code logic. The
code syntax is pretty similar too....
The first two errors are pretty obvious (or should be) from the error message. ..In C++ you don't get the address
of a member function that way anymore - you use the address-of operator, as shown in the error message.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hey Mark, the c# articles really useful to get me in c++/cli.
Can u simply show me how to use the address of operator for a function to solve that error? Thx.
|
|
|
|
|
did you try this?
m_mainSocket->BeginAccept(gcnew AsyncCallback(&ServerChat::Form1::OnClientConnect), null);
AsynCallback^ pfnWorkerCallBack = gcnew AsyncCallback(&ServerChat::Form1::OnDataReceived);
Don't be overcome by evil, but overcome evil with good
|
|
|
|