|
I need help converting this code to C#, its taken from an Media Center SDK Doc.
HRESULT CreateSession([out,retval] IMediaStatusSession** MediaStatusSession);
Another question, since typedef doesnt exist in C# i converted the following code:
typedef SAFEARRAY(MEDIASTATUSPROPERTYTAG) MEDIASTATUSTAGARRAY;
typedef SAFEARRAY(VARIANT) MEDIASTATUSPROPARRAY;
HRESULT MediaStatusChange(
[in] MEDIASTATUSTAGARRAY Tags,
[in] MEDIASTATUSPROPARRAY Properties
);
to just:
void MediaStatusChange( [In, MarshalAs(UnmanagedType.SafeArray)] MEDIASTATUSPROPERTYTAG [] tags,
[In, MarshalAs(UnmanagedType.SafeArray)] MEDIASTATUSPROPERTY [] prop);
is this ok, or is there a way of converting the typedef?
modified 16-May-21 21:01pm.
|
|
|
|
|
this is for CreateSession, from the SDK doc.
IMediaStatusSink::CreateSession
Creates a media status session.
Parameters
MediaStatusSession
[out] Address of a variable that receives the IMediaStatusSession interface pointer.
Return Values
Return values are implemented by the component. The method should return S_OK.
Remarks
When the MSAS calls this method, your component must create an object that implements the IMediaStatusSession interface and place the interface pointer in the address specified by MediaStatusSession.
modified 16-May-21 21:01pm.
|
|
|
|
|
I should've read this message first.
Since CreateSession is a COM object method, you should just instead create a COM interop assembly, a.k.a. a RCW (Runtime Callable Wrapper). In VS.NET, just right-click on your project and select Add Reference. Click the COM tab and find the typelib. Double-click it to add it to the list and click OK. An interop assembly is created with all the interfaces, enums, parameters, etc. defined. All you have to do is use them and make sure that the interop assembly (it will get copied to your build directory) gets deployed as well with your library or application).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
If this is a method on a COM object, then you should create an interop assembly using tlbimp.exe, or add a COM reference to your project in VS.NET which does the same thing.
If this is a function exported by a DLL, you can use the following signature:
[DllImport("whatever.dll", PreserveSig=true)]
private static extern int CreateSession(ref IMediaStatusSession MediaStatusSession); IMediaStatusSession would be an interface that you would have declare that matches the native interface using the same order of methods (if inheritted from IUnknown or dual), dispatch IDs (if inheritted from IDispatch or dual), and signatures; or that is declared in an interop assembly created from the typelib.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
I have an array list with elements.
I am unable to access them through indexing.
Here ia my code:
int index = itemList.Count; Where "itemList" is my "ArrayList".
for (int i=0; i < index; i++)
{
string local = (string)itemList[i];
Console.WriteLine("Printing Array: {0} and I:{1}",(string)itemList[i], i);
}
My "local" string first gets assigned zero th element of "ArrayList", but when i=1,2,3,4 etc. my "local" string still has zero th element only.
I cannot use indexing this way. I have to use "MoveNext()" of Enumerator class to access?
Thanks & Regards,
Raj
|
|
|
|
|
Your code is not very readable - the < symbols have been interpreted as the start of HTML tags.
Please replace the < symbols with < so that when it is posted it will display correctly.
Thanks.
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
Coming soon: The Second EuroCPian Event
|
|
|
|
|
Hi Sorry for messing up in Copy/paste.
Here is the code again.
int index = itemList.Count; Where "itemList" is my "ArrayList".
for (int i=0; i < index; i++)
{
string local = (string)itemList[i];
Console.WriteLine("Printing Array: {0} and I:{1}",(string)itemList[i], i);
}
Again my problem is
If there are 10 elements I am getting first element printed 10 times.
But If I use
System.Collections.IEnumerator myEnumerator = myCollection.GetEnumerator();
while ( myEnumerator.MoveNext() )
Console.Write( "\n{0}", myEnumerator.Current );
I am getting the correct output.
Thanks & Regards,
Raj
|
|
|
|
|
Out of curiousity. If all your elements are strings, why not use the System.Collections.Specialized.StringCollection class instead?
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
Coming soon: The Second EuroCPian Event
|
|
|
|
|
Hey, try this:
ArrayList itemList = new ArrayList();<br />
itemList.Add("string goes here");
Then, you can access them like this:
for (int i=0; i < itemList.Count; i++)<br />
{<br />
Console.WriteLine("Printing Array: {0} and I:{1}", (string)itemList[i], i.ToString() );<br />
}
|
|
|
|
|
I tried that. Only first element (string)itemList[0] is getting printed. Suppose if count is 10, first element is getting printed 10 times.
If I use
System.Collections.IEnumerator myEnumerator = itemList.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
Console.Write( "\n{0}", myEnumerator.Current );
}
I am getting correct output.
Thanks & Regards,
Raj
|
|
|
|
|
|
|
I suspect that you're getting confused somewhere along the line. Paste the exact code below into your project, run it, and report back:
<br />
ArrayList itemList = new ArrayList();<br />
<br />
itemList.Add("0");<br />
itemList.Add("1");<br />
itemList.Add("2");<br />
itemList.Add("3");<br />
itemList.Add("4");<br />
itemList.Add("5");<br />
itemList.Add("6");<br />
itemList.Add("7");<br />
itemList.Add("8");<br />
itemList.Add("9");<br />
<br />
int count = itemList.Count;<br />
for (int i=0; i < count; i++) {<br />
Console.WriteLine("Printing Array: {0} and I:{1}", itemList[i], i);<br />
} <br />
You're probably confused about assigning int variables. I imagine that you take a read of the Count property before you fill the ArrayList , yes? Well, that object is assigned by value, not by reference, because int is a value type. The part where you populate the array is the only piece missing in the information you gave us; notice the ensuing confusion? Next time, I'd include all the code that's probably part of the problem. I'm not being crusty, just trying to give helpful advice. Anyway, notice that above I read Count after filling the data. This is better on performance than reading Count every trip through the loop.
ArrayList is built specifically to replicate the semantics of accessing an array by index, and it uses an array internally to hold its data. It's probably silly to use an enumerator in your case. Enumerators were made so that all lists can be considered just to be implementations of IList .
Your explicit casts are unnecessary, but I left them in.
Regards,
Jeff Varszegi
|
|
|
|
|
How would you add a CheckBox column in a DataGrid?
Any help on this topic will be appreciated. Thanks in advance,
Jon
|
|
|
|
|
As I mentioned the other day, add a DataGridTableStyle to your DataGrid , which would have either DataGridTextBoxColumn s, DataGridBoolColumn s, or some custom DataGridColumnStyle . Make sure the DataGridTableStyle.MappingName matches-up with the table name (for data-binding to DataSet s or DataTable s) or class name (for binding against other IList or IListSource implementations).
Just see the documentation for the DataGridTableStyle in the Platform SDK for more information and an example, as well as the other classes and properties I mentioned above. It's really pretty simple, but you must make sure that your DataGridTableStyle.MappingName is correct or your table style doesn't get used.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
You are a great help with giving me exactly the key words to point me in the right direction. Iv'e created the DataGridBoolColumns style, and made the MappingName match the table column i'm "binding" it to. How do I tell it to display a CheckBox? I don't understand how they add the CheckBox control inside the columns.
|
|
|
|
|
Like I said, you add a DataGridBoolColumn to your table style that you added with it's MappingName set to your boolean column. If you use values other than "True" or "False" for your data, then you need to set the DataGridBoolColumn 's TrueValue and FalseValue properties. Just see the DataGridBoolColumn documentation for an example.
Also, try playing around with this in the VS.NET DataGrid designer and then examine the code. It works best if you use a typed DataSet .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
DataGridTableStyle ts2 = new DataGridTableStyle();
ts2.MappingName = "library"; // name of the table
DataGridBoolColumn boolColLib = new DataGridBoolColumn();
boolColLib.MappingName = "super"; // name of the column
boolColLib.HeaderText = "Super";
boolColLib.TrueValue = "true";
boolColLib.FalseValue = "false";
boolColLib.AllowNull= false;
boolColLib.Width = 70;
ts2.GridColumnStyles.Add(boolColLib);
dtgAppserver.TableStyles.Add(ts2);
it should work like this
|
|
|
|
|
Hello everybody...
Im used to program my games and stuff with C++ and WinAPI with OpenGL and/or GDI, GDI+...
My questions and thoughts is as follows:
1. Game programming with C# Advantages and so on...?
2. Is it possible to implement OpenGL to C#?
3. Why should I start to program in C#? Is thear any or many Advantages? Or not...
Marcus Grenängen
Lead programmer at MO Software Sweden.
|
|
|
|
|
Snews wrote:
1. Game programming with C# Advantages and so on...?
Easier to write but lacks the performance of native language applications.
Snews wrote:
2. Is it possible to implement OpenGL to C#?
Yes, but you must wrap OpenGL. There are some implementations of this already (even here on CodeProject, so just try a search), but some are good and some are not. In either case, considerable time is spent marshalling data across platforms. Depending on your requirements, this may not be desirable either.
Snews wrote:
3. Why should I start to program in C#? Is thear any or many Advantages? Or not...
The learning never stops. If you like to learn as much as you can, there's one good reason.
You should really take a look at Managed DirectX at http://msdn.microsoft.com/directx[^], which is managed code for DirectX and written from the ground-up - it's not a wrapper. There's a couple good books that cover game development using Managed DirectX (using both C# and VB.NET) from Amazon that are pretty good and also discuss the ads/disads:
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Like the anser on 3... Thats right... How does it work with the memmory processing and handling in C# then? Better and easier then in C/C++? or is it just crappy?
This Managed DirectX? I will take a closer look at it, even if I never have liked DirectX
Tanks for your time Mr...
Marcus Grenängen
Lead Programmer MO Software Sweden
|
|
|
|
|
Use managed DirectX instead. It's not at a very mature state yet (lacking some documentation and still have annoying bugs), but I'm sure it will become the preferred way of using DirectX pretty soon. Just compare managed vs unmanaged DirectX code (C++ vs C#) and you will notice the great improvement in readability and the superior object oriented model.
Even though I'm used to coding C++, I find C# code so much more readable, and more productive to use. Since the framework includes a compiler you can even use C# for the scripting part of the game (or JScript if you like that better).
Your ideal game project would be 95% C# code, and 5% C/C++ code mixed with assembler for the most performace critical parts. In some years, most people in game industry will use this model I think and hope.
Regards,
/Björn Morén
|
|
|
|
|
1. The advantages include less amount of code to write, cleaner syntax, no manual memory management, faster development cycles. Disadvantages include slower performance, access to platform level services only via P/Invoke.
2. You can use OpenGL in C#. As Heath mentioned, it's already been done. See CsGl[^], the Exo Engine[^], or the cross-platform Tao OpenGL library[^].
3. It's has simpler language syntax than traditional C++, which translates into code that's easier to read, write, and find bugs. Memory management is taken care of for you, preventing many pitfals of C including memory leaks and circular references. It generates verifiable 'safe' code which could be quite important when Microsoft's ClickOnce deployment rolls around. It interoperates with other .NET languages seamlessly without any extra effort; write a public Test() function in a dll and I'd be able to use it from VB.NET, managed C++, JScript.NET, or any other language targetting the .NET platform. Dlls can be stored in the Global Assembly Cache in which dll versions do not overwrite one another, potentially preventing the problems associated with 'dll hell'. See Microsoft's .NET overview[^] for a list of their benefits to using .NET.
Hope that answers some of your questions. To be honest, I don't know if C# is right for game development; C#, while theoretically faster than Java (due to being 'designed for JIT compiling') isn't as fast as C++, and doesn't directly give you access to low-level services in the same flavor as traditional C or C++ does. On the other hand, C++ is not as fast as C, and C is not as fast as pure x86 ASM code, yet that has not stopped developers historically from writing games in C++. I guess it's a tradeoff - speed for RAD. If you are more focused on finishing a game faster than writing a game that runs faster, use C#. If you are more focused on writing a game that squeezes every last drop of performance out, use C/C++/ASM.
FYI, some groups have done interesting game development work with C#. For instance, Vertigo software ported Quake II (written in C and ASM) to the .NET framework using managed C++. clickity[^]. As previously mentioned, Microsoft has released Managed DirectX 9[^]. Microsoft's new XNA[^] initiative plans to build on DirectX (including managed) and Visual Studio as tool bases as well.
|
|
|
|
|
CsGL is obsolete. Tao framework is it's "child" and is fully functional. And my friend has just finished wraping the CG so I think it will be aded in the next realese.
Q:What does the derived class in C# tell to it's parent?
A:All your base are belong to us!
|
|
|
|
|
C#, while theoretically faster than Java (due to being 'designed for JIT compiling')
I love how Redmond constantly tries to imply that JIT compilation is their bright idea. Java had JIT compilers long before the .NET brand was being marketed to the world. The execution speed of Java code, according to an IBM study, is about 1.7 times slower than equivalent Fortran code. Deep compilers, similar to ngen.exe for .NET, exist for Java and work well.
JIT compilation doesn't really say anything about the runtime speed of code, by the way. A good JIT compiler will compile code that runs faster than the output of a worse compiler. JIT compilation does, however, introduce some unavoidable slowness when something is first run, due of course to the compilation time required.
I implemented several applications side-by-side in C# and Java a while back, and they ran neck-and-neck on my setup. Java is faster in some respects, and .NET is a little faster in others.
I agree with everything you wrote except that; chalk this post up to having too much time on my hands on a Sunday afternoon.
Regards,
Jeff Varszegi
|
|
|
|
|