|
Say I want to use the Windows built-in speech synthesizer. In Visual Studio I have to right-click references and click add reference, add in System.Speech and THEN I can include a using System.Speech.Synthesis... This means that adding System.Speech as a reference is actually doing something that's allowing me to reference the class I want.
My question is, what is it doing and how can I do it manually? I've been toying with Visual Studio Developer Console and manually compiling .cs files with csc as shown on this page[^]
How could I compile a file that uses external resources? Thanks.
|
|
|
|
|
|
TheOnlyRealTodd wrote: n Visual Studio I have to right-click references and click add reference Which creates a .csproj file that, among other stuff, contains the references.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
You can use
csc Program.cs /r:SpeechSynthesizer.dll /out:YourOutputExeName.exe
1. Here Program.cs is the file to be compiled
2. /r:SpeechSynthesizer.dll is the dll in same directory
3. YourOutputExeName.exe is the name of the output exe
For more details refer this thread: http://www.csharpnet.net/article/building-csharp-applications
|
|
|
|
|
Hi,
I'd like to know if it's possible to pass memory stream between C# windows.
Thanks
|
|
|
|
|
A memory stream is an object, so yes. However you need to define what you mean by c# windows. I have never heard of a c# window!
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
If the question you are asking is, can you share streams between two C# applications, there are various techniques. You could self-host WCF, or you could create something like a named-pipe or TCP connection. You could even create a memory-mapped file[^].
This space for rent
|
|
|
|
|
The requirement is to pass the data as a memory stream between two different C# applications.
This is the code to send stream. But it doesn't really work.
using (MemoryStream ms = GetMemoryStream())
{
int hWnd = FindWindow(null, "Receive");
int dataSize = Convert.ToInt32(ms.Length);
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.lpData = Marshal.AllocCoTaskMem(dataSize);
cds.cbData = dataSize;
SendMessage(hWnd, WM_COPYDATA, 0, ref cds);
Marshal.FreeCoTaskMem(cds.lpData);
}
modified 17-Jul-16 20:18pm.
|
|
|
|
|
You will have to be more specific than "it doesn't really work". That tells us nothing useful about what issues you are seeing. What happens if you debug the application? Does it find the window? Is your structure created properly? Why do you have to use such a cumbersome method for passing data? A simple TCP connection would be enough.
This space for rent
|
|
|
|
|
Well, the requirement is memory stream. That is, the Receiving application has to get the data as a memory stream.
I get an error is at
int dataSize = Convert.ToInt32(ms.Length);
and the error is "Cannot access a closed Stream."
modified 18-Jul-16 19:17pm.
|
|
|
|
|
This did work!
MemoryStream ms = new MemoryStream();
using (ms = GetMemoryStream())
{
ms = new MemoryStream(ms.ToArray());
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.lpData = IntPtr.Zero;
cds.cbData = 0;
try
{
ms.Flush();
ms.Position = 0;
int hWnd = FindWindow(null, "Receive");
int dataSize = Convert.ToInt32(ms.Length);
cds.dwData = 0;
cds.lpData = Marshal.AllocCoTaskMem(dataSize);
cds.cbData = dataSize;
SendMessage(hWnd, WM_COPYDATA, 0, ref cds);
}
finally
{
Marshal.FreeCoTaskMem(cds.lpData);
ms.Close();
}
}
But I think I'm not passing the memory stream to the other application. I declared the dwData as Memory Stream. Am I doing right?
|
|
|
|
|
I got it to work with the help of this website.
https://github.com/jimschubert/wixedit/blob/master/src/Helpers/CopyDataMessenger.cs
to jim
Thanks all for your help.
Thanks
|
|
|
|
|
HI,
I want to know what is Lifo and Fifo,as i search in net but i didn't get the answer clearly???
Can any one explain it with simple example???
Thanks...
|
|
|
|
|
LIFO - last in first out
FIFO - first in first out or fly in fly out (mining employees do this in remote sites)
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
|
|
I did something similar here:
Mediator - a communicator between ViewModels[^]
I.a:
Type unboundWEMType = typeof(WeakEventManager<,>);
Type[] typeArgs = { _sender.Target.GetType(), typeof(EventArgs) };
Type constructedWEMType = unboundWEMType.MakeGenericType(typeArgs);
etc...
It's a pain.
|
|
|
|
|
Kenneth Haugland wrote:
It's a pain.
Haha, it can be indeed!
|
|
|
|
|
I don't quite understand your problem, if you could make the Generic01 with the code I created above, surely you could get the type from the created element?
|
|
|
|
|
It's for a serializer, I need to recreate the type that was saved.
Not the type that is now.
It might have changed!
|
|
|
|
|
Using fieldType.ToString() would give you System.Collections.Generic.List`1[T] .
If the class had multiple type parameters, it might be important to know which one was used in the type.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Simple!
|
|
|
|
|
Richard Deeming wrote: t might be important to know which one was used in the type.
Ha yes! another bug!
|
|
|
|
|
And in my usual fashion of cobbling together source codes before I have grasped the concepts, I give you this glorious error:
No overload for method 'PassStructIn' takes 4 arguments
The code in question happens to be a call to an unmanaged dll:
class Program
{
public struct Quaternion
{
double w; double x; double y; double z;
}
[DllImport("YLScsDrawing.dll")]
public static extern void PassStructIn(ref Quaternion myQuaternion);
static void Main(string[] args)
{
Program.Quaternion myQuaternion;
Program.PassStructIn(ref myQuaternion);
Thread absoluteThread = new Thread(unused => Program.PassStructIn((double)absW, (double)absX, (double)absY, (double)absZ));
absoluteThread.Start();
Please advise on how to fix this...
Thanks.
|
|
|
|
|
You'd need to know how many arguments are expected. The code complains that there is no method accepting four arguments.
I'd also advise against using a lambda to start a thread.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|