|
Paul Riley wrote:
Either use Interop to get at the API registry functions or convert to and from a string using SetValue.
Can you show me an example? I am not following you. Thing is the value that I am writing into the registry is a value that Windows Media Streaming server needs. This is not for a program of my own. I am trying to automate some stuff so converting it to or from a string is not really the answer, I don't think. I am able to feed the value in as a dword value as long as I keep it below that 2147483647 number and do it like this:
regKey.SetValue("MaxBandwidth", 2147483647);
However if I try to do this, the number gets converted to a string:
regKey.SetValue("MaxBandwidth", 4294967295);
So then I tried this:
UInt32 maxValue = 4294967295;
regKey.SetValue("MaxBandwidth", maxValue);
This also gets converted to a string.
Thanks,
Bill K.
|
|
|
|
|
codeweenie wrote:
This is not for a program of my own. I am trying to automate some stuff so converting it to or from a string is not really the answer, I don't think.
You are correct, so you need to use Interop.
This is slightly complicated at first but once you get the hang of it, it's quite easy (that's the story of everything .NET, in my experience). This[^] is a fair introduction to Interop. Other than that, you can search for DllImport/DllImportAttribute here and on MSDN and find more detailed examples.
Once you understand that, it's just a case of looking up the API registry calls: RegOpenKeyEx and RegSetValueEx.
If you run into any more problems, come back and ask.
Paul
We all will feed the worms and trees So don't be shy - Queens of the Stone Age, Mosquito Song
|
|
|
|
|
Try this perhaps:
UInt32 maxValue = 4294967295;
regKey.SetValue("MaxBandwidth", maxValue.ToString("X")); //???
or maybe add a byte[], I cant really see what you can do from the docs.
I rated this article 2 by mistake. It deserves more. I wanted to get to the second page... - vjedlicka 3:33 25 Nov '02
|
|
|
|
|
leppie wrote:
regKey.SetValue("MaxBandwidth", maxValue.ToString("X")); //???
I tried this, and I get "FFFFFFFF" as my value in the reg. It's a string value of course. Not sure how to employ the byte[] stuff.
From the docs and what I can't find on MSDN's site, I agree, this is getting to be a real problem. I can't understand why M$ would have one of their servers expect a value that can't be set via another program, that just does not make sense to me. There has to be a way to set this. I can't believe that somebody has not created a work around for it. I am just to new to C# to know how to do it just yet.
Thanks,
Bill K.
|
|
|
|
|
Someone help me out!
On my old VB Application, I use
set fvapp = createobject("fldview.application")
to create the ole automation server, work on it and use
set fvapp = nothing
to close the server. It works perfect.
when I convert to C#, since there is no way to free the fvapp, the server will be keep runing until my VB app close.
How I force C# to close the external OLE server? using "fv = null" doesn't work.
it close the server's interface, but the exe file is running still in the task list.
|
|
|
|
|
Try Marshal.ReleaseComObject()
|
|
|
|
|
A lot of exe COM servers expose a fvapp.Quit method.
If that's not enough, try sending the WM_QUIT message.
|
|
|
|
|
I need to construct a C# project that is a winform client and displaying an HTML stream within a control on that form. I have a need to be able to stream an HTML document to the control, including some DHTML, capture click events and context menu events.
Has anyone done something like this? I am aware of syncFusion FAQ but their article and examples are a bit flaky (displaying the form crashes and finding how they are passing the text to populate the example is deeply hidden within the code) and don't really answer my question.
I'm pretty sure I will have to construct my own control but don't even know where to begin. Any suggestions or help would be greatly appreciated.
MJ
_____________________________________________
The world is a dangerous place. Not because of those that do evil, but because of those who look on and do nothing. -Einstein
|
|
|
|
|
Take a look at my article MaChat[^]. Unfortunately, it's written in MC++.
However, I've got some code in C# which does what you probably need ( WebBrowserEx & DHTMLControl ). If you want it send me your e-mail address.
43 68 65 65 72 73 2c
4d 69 63 68 61 65 6c
|
|
|
|
|
Hi,
Im writing an application, that connects to multiple http servers by using threads.
I spawn about 30 threads and they uses httprequest and httpresponse.
I dont use any callback, cause i have done some simple que syncs.
(using lock)
Each thread loops to different sites.
Its Act a little like a crawler, with reg exp to stript some links etc.
My problem is when I have ran the app. for a couple of minutes and I get this error. (I cant catch it)
SystemOutOfMemory
mscorlib.dll!System.Threading.Overlapped::unpack(System.Threading.NativeOverlapped* nativeoverlapptr = {System.Threading.NativeOverlapped})
I cant debug it, but Im thinking mayby its the httprequest ?
Does anyone have problems with httprequest?
Or do anybody know how I can find the problem.. (some kind og debugging tips etc)?
Or know how I can supress the error msg
Regards
|
|
|
|
|
There is a very good example at GotDotNet. Search for WebSpider, excellent code. He implemented his own threadpool, which you should be doing (I think the max is 30 threads???). You can just modify that.
I rated this article 2 by mistake. It deserves more. I wanted to get to the second page... - vjedlicka 3:33 25 Nov '02
|
|
|
|
|
Hi Leppie,
Thanks once again for the help! I will certainly look into that.
It's looks VERY interesting.
But I have already done alot of coding making the que, classes etc.
All is done by using my current threading method
But mayby its the solution..
But thanks again leppie!
Regards
|
|
|
|
|
If you are looking to track down the bug I'd recommend the allocation profiler which will give you memory snapshots (same site) and compuware's devpartner profiler might give you some insight.
|
|
|
|
|
I am looking for a way of converting a System.Type to a System.Data.SqlDbType
So when I write a type as text it gets the right SqlDbType.
for instance let's say I've got a variable a of an unknown type,
with function GetType() I can get the System.Type of a.
Now i'm looking for a way to do the same and get the right SqlDbType
of the same variable.
Any thoughts?
|
|
|
|
|
I have done just a hashtable mapping for that, anyways here's the code:
public class TypeMapping
{
static Hashtable map;
public static Hashtable Mapping
{
get {return map;}
}
static TypeMapping()
{
map = new Hashtable();
map.Add(SqlDbType.BigInt, typeof(Int64));
map.Add(SqlDbType.Binary, typeof(byte[]));
map.Add(SqlDbType.Bit, typeof(Boolean ));
map.Add(SqlDbType.Char, typeof( String ));
map.Add(SqlDbType.DateTime, typeof( DateTime ));
map.Add(SqlDbType.Decimal, typeof( Decimal ));
map.Add(SqlDbType.Float, typeof( Double ));
map.Add(SqlDbType.Image, typeof( byte[]));
map.Add(SqlDbType.Int, typeof( Int32 ));
map.Add(SqlDbType.Money, typeof( Decimal));
map.Add(SqlDbType.NChar, typeof( String ));
map.Add(SqlDbType.NText, typeof( String ));
map.Add(SqlDbType.NVarChar, typeof( String ));
map.Add(SqlDbType.Real, typeof( Single ));
map.Add(SqlDbType.SmallDateTime, typeof( DateTime ));
map.Add(SqlDbType.SmallInt, typeof( Int16 ));
map.Add(SqlDbType.SmallMoney, typeof( Decimal));
map.Add(SqlDbType.Text, typeof( String ));
map.Add(SqlDbType.Timestamp, typeof( DateTime ));
map.Add(SqlDbType.TinyInt, typeof( Byte ));
map.Add(SqlDbType.UniqueIdentifier, typeof( Guid ));
map.Add(SqlDbType.VarBinary, typeof( byte[] ));
map.Add(SqlDbType.VarChar, typeof( String ));
map.Add(SqlDbType.Variant, typeof( Object ));
}
}
I rated this article 2 by mistake. It deserves more. I wanted to get to the second page... - vjedlicka 3:33 25 Nov '02
|
|
|
|
|
That did the trick, Thank you very much
|
|
|
|
|
hi!
how can i draw a rectangle in a richtextbox?
thanks
|
|
|
|
|
System.Drawing.Rectangle
Exsample : System.Drawing.Rectangle jr = new System.Drawing.Rectangle(10,10,100,100);
System.Drawing.Rectangle jr = new System.Drawing.Rectangle(int X,int Y,int Width,int Height);
this code (below) might work...but i just through it together... where to see the code jr.Size it is actually suposed to be the bounds...but it might work anyway.
System.Drawing.Rectangle jr = new System.Drawing.Rectangle(10,10,100,100);<br />
System.Drawing.Graphics.FillRectangle(new SolidBrush(Color.Red),jr.Size);
Jesse M
P.s : if you are making a drawing program (which it seems like you might be) check to see if the RichTextBox class has a OwnerDraw property. this would give you OnDraw Events that you could override.
The Code Project Is Your Friend...
|
|
|
|
|
how do I translate into C#:
extern "C" int f(void*);
I know about "unsafe", but I'd like it to be a normal DLLImport
|
|
|
|
|
The IntPtr type can handle void pointers. In fact, it has static methods specifically for dealing with them.
Incidentally, "unsafe" doesn't mean "not safe to do", as the name implies. It just means the runtime cannot verify the types and such for us. I read somewhere that the name was chosen to scare unseasoned programmers away from using it. Internally, the CLR uses unsafe all the time.
Cheers
|
|
|
|
|
Jeff J wrote:
it has static methods specifically for dealing with
which one?
forgot the 2nd signature I am using
extern "C" int f2(void**);
I managed to make it work witch "ref uint" unfortunatly the first function does not take return value.
DLLImport("rv.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl))
public static extern int f(uint s);
DLLImport("rv.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl))
public static extern int f2(ref uint s);
After I use return value for "f()" in "f2()" I got something like "'System.Runtime.InteropServices.MarshalDirectiveException' Can not marshal parameter #1: Invalid managed/unmanaged type combination (Int/UInt must be paired with I or U)"
Any suggestions are welcome (I'll definitely try unsafe)
|
|
|
|
|
Anonymous wrote:
Jeff J wrote:
it has static methods specifically for dealing with
which one?
Ones, the ones in the Marshal class
I rated this article 2 by mistake. It deserves more. I wanted to get to the second page... - vjedlicka 3:33 25 Nov '02
|
|
|
|
|
As leppie posted, there are many useful functions in the Marshal class, which is good to become familiar with if you are interfacing with external C or C++ functions. IntPtr itself also has useful methods, such as ToPointer() and ToInt32(), along with the statics Zero and operator overloads that can convert between void pointers and IntPtr types. Which ones to use depends on how you plan on calling the extern functions.
It is hard to explain the usage details without seeing a code example. If you could post one with how the calls are intended to be made, and how the parameters are to be passed, I'm sure I could explain a solution.
Regarding using the extern funcs you currently have, if the calling C# func is declared unsafe, then you can just cast your "ints" as in regular C code (including pointers and taking addresses). Or you can prototype the externs as unsafe from the start like:
DLLImport("rv.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl))
public static extern unsafe int f(void *pVoid);
DLLImport("rv.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl))
public static extern unsafe int f2(void **ppVoid);
If you are looking to do this using the non-unsafe runtime interop features, you could do:
DLLImport("rv.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl))
public static extern int f(IntPtr pVoid);
DLLImport("rv.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl))
public static extern int f2(IntPtr ppVoid);
|
|
|
|
|
Hi,
I'm getting a System.ArgumentException trying to call the following
IActiveDesktop method:
STDMETHOD (AddDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE;
This is how I'm marshaling the call.
void AddDesktopItem(
[In, MarshalAs( UnmanagedType.LPStruct )] COMPONENT pcomp,
[In] int dwReserved
);
I believe the problem is with marshaling the COMPONENT structure. Could
some one point out to me if I'm marshaling the nested structures correctly.
Here is the original typedef for the struct and my c# attempt at marshaling
it.
typedef struct _tagCOMPONENT
{
DWORD dwSize; //Size of this structure
DWORD dwID; //Reserved: Set it always to zero.
int iComponentType; //One of COMP_TYPE_*
BOOL fChecked; // Is this component enabled?
BOOL fDirty; // Had the component been modified and not
BOOL fNoScroll; // Is the component scrollable?
COMPPOS cpPos; // Width, height etc.,
WCHAR wszFriendlyName[MAX_PATH];
WCHAR wszSource[INTERNET_MAX_URL_LENGTH]; //URL of the component.
WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH]; //Subscrined URL
DWORD dwCurItemState; // Current state of the Component.
COMPSTATEINFO csiOriginal;
COMPSTATEINFO csiRestored; // Restored state of the component.
}
COMPONENT;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode )]
public class COMPONENT
{
public int dwSize; // Size of the structure.
public int dwID; // Reserved. Set to zero.
public COMP_TYPE iComponentType;
[MarshalAs( UnmanagedType.Bool )]
public bool fChecked;
[MarshalAs( UnmanagedType.Bool )]
public bool fDirty;
[MarshalAs( UnmanagedType.Bool )]
public bool fNoScroll;
[MarshalAs( UnmanagedType.Struct )]
public COMPPOS cpPos;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 260 )]
public string wszFriendlyName;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 2083 )]
public string wszSource;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 2083 )]
public string wszSubscribedURL;
public ITEM_STATE dwCurItemState;
[MarshalAs( UnmanagedType.Struct )]
public COMPSTATEINFO csiOriginal;
[MarshalAs( UnmanagedType.Struct )]
public COMPSTATEINFO csiRestored;
}
StructLayout( LayoutKind.Sequential )]
public class COMPSTATEINFO
{
public int dwSize;
public int iLeft;
public int iTop;
public int dwWidth;
public int dwHeight;
public ITEM_STATE dwItemState;
}
[StructLayout(LayoutKind.Sequential)]
public class COMPPOS
{
public int dwSize;
public int iLeft;
public int iTop;
public int dwWidth;
public int dwHeight;
public int izIndex;
[MarshalAs( UnmanagedType.Bool )]
public bool fCanResize;
[MarshalAs( UnmanagedType.Bool )]
public bool fCanResizeX;
[MarshalAs( UnmanagedType.Bool )]
public bool fCanResizeY;
public int iPreferredLeftPercent;
public int iPreferredTopPercent;
}
|
|
|
|
|
Nathan Tran wrote:
I'm getting a System.ArgumentException trying to call the following
IActiveDesktop method:
STDMETHOD (AddDesktopItem)(THIS_ LPCCOMPONENT pcomp, DWORD dwReserved) PURE;
This is how I'm marshaling the call.
void AddDesktopItem(
[In, MarshalAs( UnmanagedType.LPStruct )] COMPONENT pcomp,
[In] int dwReserved
);
I believe the problem is with marshaling the COMPONENT structure.
STOP! Its exactly what it says. Dont use LPStruct. Just add ref to it, or Marshall the structure to unmanaged memory 1st, then pass an IntPtr into the function (obviously you will need to change the function definition).
Once (and only then), you can lok at the HRESULT you are getting to see if the struct size is infact correct (which probably wont be the case, never is with these nested structs). Good luck NOT lol, where is the functions DllImportAttribute? Thats the problem. Not sure how it compiled...
I rated this article 2 by mistake. It deserves more. I wanted to get to the second page... - vjedlicka 3:33 25 Nov '02
|
|
|
|
|