|
my problem is to get the void * in there. and when to use ref and out.
i just can't figure this out on my own. call me newbie if you want. i just don't get it.
|
|
|
|
|
If you're unsure how to marshal a LPVOID, you could start with IntPtr ...
The Marshal class also has methods to alloc and free unmanaged memory that can come in handy in this situation.
Regards,
mav
--
Black holes are the places where God divided by 0...
|
|
|
|
|
I would use the ref and pass in a IntPtr. I think that would work, but I guess you won't know until you try.
Ben
|
|
|
|
|
Hi,
you can watch how this P/Invoke site[^] calls a lot
of Win32 functions; you can compare their C arguments with yours and do the same
in your code. (Make sure to check a couple of similar cases, there may be some mistakes !)
In general, if C needs an address pass a value type by reference ("ref"), or a
reference type as is (e.g. a const char* arg in C is a string in C#).
If C needs an address of an address (not often) pass a reference to a reference type.
If native code needs to write to a string argument, pass it a StringBuilder with sufficient
Capacity.
etc etc etc
|
|
|
|
|
Thanks. that site is good!
|
|
|
|
|
I have created a custom XML/Encryptor program and the last thing I need to do is get a Find and Replace function working. The program has been built using ICSharp, I am trying to use there SearchAndReplace class but am running into problems. I know that it is a specific library that I am asking for help on but I was wondering if anyone had any idea of how to us it here is the code I am using and the error that I am getting:
SearchAndReplace.SearchAndReplaceDialog l_oSerachnReplace = new SearchAndReplace.SearchAndReplaceDialog(SearchAndReplace.SearchAndReplaceMode.Search);
l_oSerachnReplace.ShowDialog();
I get the following error:
Resource not found : Icons.16x16.FindIcon
|
|
|
|
|
Hi All,
I want to make scroll in the from, i set Allow scroll property to true but it doesn't work, so if there is another option please anyone help me
Thanks alot
|
|
|
|
|
Could you clarify what you are trying to accomplish? What are you scrolling?
"Any sort of work in VB6 is bound to provide several WTF moments." - Christian Graus
|
|
|
|
|
i want to scroll form itself coz it hold alot of controls and its size 900*800 so if the project run on any computer with resolution less then 1024*768 controls will not be appear, so can i make scroll in the form to be used in any resolution
Thanks for youe reply
|
|
|
|
|
Hi, I'm developing a MediaCenter Type of Application. There seem to be two options for playing Audio/Video using Media Control Interface (MCI) and DirectX. As I'm new to C# can you tell me which one should I choose and their respective benefits. My primary concern is that whatever I choose should put minimum load on the system. I'm open to other suggestions as well.
Thanks...
P.S: I havent particularly liked the approach required to use MCI.
|
|
|
|
|
Erhm, i'd recommend DirectX. For now you can use it for just playing tracks, no problem, you can also use MCI instead. But if you'd like to expand the possibilities of your app, you'll be stuck to the MCI limitations.
|
|
|
|
|
Hi,
I have seen from the PetShop .NET project that they have the following method for creating salt:
private string GenerateSalt()
{
byte[] buffer = new byte[SALT_SIZE_IN_BYTES];
(new RNGCryptoServiceProvider()).GetBytes(buffer);
return Convert.ToBase64String(buffer);
}
SALT_SIZE_IN_BYTES = 16. Is this the best way to do it? Is this how the default membership provider does it?
Regards
ma se
|
|
|
|
|
That's about how I do it. Don't generate a salt size too big otherwise you'll end up with a Base64 string the length of a aircraft carrier. I find that 10 to 20 bytes is sufficient.
I just got done explaining this to someone else, here[^].
-- modified at 12:33 Friday 13th July, 2007
|
|
|
|
|
I having a weird problem with remoting and I think it is due to Symantec's firewall that we have installed on all our computers as part of IT's standard setup. In my application I have a remote object that the server publishes using RemotingConfiguration.RegisterWellKnownServiceType. The server then also gets a copy of the object itself using Activator.GetObject. This works fine if I'm connected to our corporate network. However, when I'm disconnected it doesn't work. I get a message that the "No connection could be made because the target machine actively refused it". The weird part is that once in a while, it actually does work!
I checked out our Symantec firewall (which I can't change settings on) and watched it as I tried to connect and I notice that the number of blocked inbound connections does increase when I attempt to start my server (but the number of allowed connections also increases). When I'm connected to the network, I don't get any increase in the number of blocked connections. Digging deeper, Symantec has a category called "Blocked unmanaged TCP/UDP inbounds" which increases when I try and start my server while off-line.
Does anybody know what it means by "unmanaged" in this context? It seems like the server registering the well known service type is accepted but the attempt to connect to that well know service is not. Is there a way to convince this POS firewall that it should allow my connection?
I'm totally screwed if I can't find a way around this
|
|
|
|
|
Have you figured this one out?
"Any sort of work in VB6 is bound to provide several WTF moments." - Christian Graus
|
|
|
|
|
Actually, I just did. It seems that if I set rejectRemoteRequests when I create the TcpChannel on the server the firewall doesn't block it anymore. So I think the solution is to check when creating the server to see if I'm online and if not set rejectRemoteRequests and assume that the client has to be on the same computer (which it does, because we're offline anyway).
The only problem I see with this is if the computer was not connected when the server starts, but is then connected later (or vis-versa) but I don't think that's something I'm going to worry about.
It still mystifying as to why the firewall blocks activity on a port when not connected to the network, but has no problem with it when you are connected (and it could actually be a malicious attack).
|
|
|
|
|
Wjousts wrote: It still mystifying as to why the firewall blocks activity on a port when not connected to the network
That is really odd
"Any sort of work in VB6 is bound to provide several WTF moments." - Christian Graus
|
|
|
|
|
I want to declare the object of a class at run time. For example if string str="schedule" then declare the object of Schedule class and pass this string to its construction.
Is there any way to do that? Please tell me the solution..
|
|
|
|
|
This can be done using reflection. Plenty of good article online, just google C# reflection
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
I did google on this. The only thing I got is that you can get the type and member info of a class. I couldn't find any way to declar the object of a class at run time.
If you know the code, please write it.
|
|
|
|
|
You can use either Activator.CreateInstance() or Assembly.CreateInstance()
|
|
|
|
|
You can do this using reflection.
Here's an example using .NET 1.1.
Assembly assembly = Assembly.GetExecutingAssembly();
string continentFactory = ConfigurationSettings.AppSettings["ContinentFactory"];
Binder binder = null;
Type continentType = assembly.GetType(continentFactory);
object[] args = null;
ContinentFactory continentInstance = (ContinentFactory) continentType.InvokeMember(
null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, binder, null, args
);
string animalWorld = "PatternsTest.AnimalWorld";
Type worldType = assembly.GetType(animalWorld);
args = new object[] { continentInstance };
AnimalWorld worldInstance = (AnimalWorld) worldType.InvokeMember(
null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, binder, null, args
);
worldInstance.RunFoodChain();
);
Kevin
|
|
|
|
|
Hello all,
I have a background thread that updates some userControls. To do this updates, I call invoke on the control, from the background thread, after testing for invokeRequired. No problem so far...
The problem begun when I tried doing this updates before the userControl has been displayed (like when it is on a hidden tagpage). In this case, the control does not have a handle yet, and invokeRequired returns false, causing my logic to make the backgroud thread to update the control directly. There´s no need to say what happened to my application next...
Then, to avoid this, I have begun to test is the userControl has a Handle, and if it hasn´t, I do control.CreateControl(). After this, it seemed like I could update the control using invoke properly. But now my application is freezing sometimes, like what happens when another thread tries to update a control without calling invoke.
How can I solve this? I realy need that all controls are created when this backgroud thread begins its job...
Thanks
Peterson
|
|
|
|
|
When do you start the background thread?
You shouldn't be seeing controls without handles. The only time that occurs is in the constructor. Once the constructor returns all the controls should be completely created.
You could always go through all your controls and call CreateControl() in your constructor, just to make sure the controls are all created. That way you're not making that call from another thread.
CreateControl() is a thread-bound operation and should only ever be called on the GUI thread.
|
|
|
|
|
Peterson Luiz wrote: The problem begun when I tried doing this updates before the userControl has been displayed (like when it is on a hidden tagpage).
There is a hack to get this to work. Just make sure you refer to the control's Handle property somewhere (in the correct thread, of course). The getter for Handle creates a handle if it already hasn't been created and it all works fine thereafter. I usually put it right after InitializeComponent.
class MyForm : Form
{
MyControl control;
public MyForm()
{
InitializeComponent();
IntPtr val = control.Handle;
Console.WriteLine(val.ToString());
}
}
Note that it's a hack and it relies on an implementation detail which might change in the future.
|
|
|
|