|
You spelled "Foo" wrong.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
I think he actually means it's Bars enemy.
|
|
|
|
|
I've got some public class
class Foo
{
public int a;
public int b;
...
}
And I'd like to pass its instance to some unmanaged lib function, which has the same struct with int a, int b, etc...
C#
Foo foo = new Foo();
fixed (void* pfoo = foo) //<--------- error????
{
someFunction(pfoo);
}
[DllImport("somelib")]
static extern unsafe int someFunction(void* p);
C++
typedef struct _somestr
{
int a;
int b;
int c;
...
}SOMESTR;
__declspec(dllexport) someFunction(SOMESRT* p)
{
p->a = 10;
p->b = p->c;
}
chesnokov
|
|
|
|
|
Hi
declare your function like this :
DllImport("somelib")]
static extern unsafe int someFunction(IntPtr p);
then use marshalling to reconstruct your C++ strucutre -> into a C# 'struct' (google it)
In your DLL
Use CoTaskMemAlloc function to allocate memory
To free use CoTaskMemFree
|
|
|
|
|
?? there is a C# structure, already allocated. I need to pass it to C++ function in the dll. Please the code snippet.
chesnokov
|
|
|
|
|
As lisan said, you have to use a struct .
You probably also want this attribute:
[ StructLayout( LayoutKind.Sequential ) ]
struct ...
Then you have to take the address of the struct :
fixed( void* pfoo = & foo )
You can have a look at http://pinvoke.net/[^] for some examples.
Nick
----------------------------------
Be excellent to each other
|
|
|
|
|
fixed( void* pfoo = & foo )
Error 1 You cannot use the fixed statement to take the address of an already fixed expression
fixed (void* pp = p)
Error 1 Cannot implicitly convert type 'SomeStruct' to 'void*'
chesnokov
|
|
|
|
|
Chesnokov Yuriy wrote: fixed( void* pfoo = & foo )
Error 1 You cannot use the fixed statement to take the address of an already fixed expression
That's because foo is a local variable, so it's already in a fixed position on the stack. You can only fix objects that is in the heap.
Just get the address of the struct:
void* pfoo = &foo;
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
bingo! Put the struct as a class field and allocate it there.
Can I allocate it in a function that it goes onto heap??
chesnokov
|
|
|
|
|
You have to use IntPtr instead of void
use Marshall.CoTaskMemAlloc method to allocate
Marshall.CoTaskMemFree method to free after using your struct
|
|
|
|
|
Hello,
i want to check in a function, if a key is at the time pressed... in my example the CTRL-Key. how is that possible? I've tested it with the "key-down" event and so on, but thats not the correct what i need. i need an function, which gives me a bool-value if this key is actually pressed or not.
Any ideas? Thanks.
|
|
|
|
|
GetKeyAsyncState. It's a win32 API, so you'll p/invoke it.
Christian Graus
No longer a Microsoft MVP, but still happy to answer your questions.
|
|
|
|
|
i have a C# windows application form and i want that on clicking a button the value in a textBox should be incremented. for e.g. if i have entered 0 in the textBox ,every time i click the button the value in textBox should be incremented to 1,2,3,...and so on.But everytime the form runs the increment starts from 0. Is there any way to store the value contained in the textBox after the form closes and increment that value when i click the button when the form runs the next time?...Plz. Help
|
|
|
|
|
There are many, but depends what suits you the most. Basically, you need to save this value in some persistent store( eg flat file, database, registry etc).
At the form load, read this value from the sorce and display in that texbox.
Please remember to rate helpful or unhelpful answers, it lets us and people reading the forums know if our answers are any good.
|
|
|
|
|
If you need this value only during the application running you can save it in the static Program class
else if you need to read this value after closing the application you can save it in an XML file or TXT file if this value does not have a secure meaning else save it in a database or in the user system registry.
Dad
|
|
|
|
|
This is the same question as you asked already as "incrementing using C#.Net"
Didn't you liek the answers you got there? You will only get the same again.
Bob
Ashfield Consultants Ltd
|
|
|
|
|
have u tried using static variables ?
|
|
|
|
|
i'm not sure if this can be done using a static variable....can a static variable retain its last value when the page loads again?
|
|
|
|
|
Hello,
I am using the following code to delete an HTML element form a document displayed in a webbrowser control:
HtmlElement elem = webBrowser1.Document.GetElementFromPoint(e.ClientMousePosition);
elem.OuterHtml = "";
MessageBox.Show(webBrowser1.DocumentText);
but when I display the webbrowser documenttext property I found the original html including the deleted element!
How can I delete an html element in a web browser control?
Dad
|
|
|
|
|
Never having used the web browser control I am guessing so! I presume when you load in the document you are reading from the original, you then delete a control in the browser control. This ONLY affects the copy loaded into the control NOT the original source.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
OK, but how can I get the new html copy from the web browser.
Dad
|
|
|
|
|
You will have to remove the element from it's parent. I dont think setting OuterHtml will have any effect.
|
|
|
|
|
HI
i am working on c# windows application.When i click the button a validation window has to be open ,i am getting this in minimised state
how to get it in normal state.I am new to .net development
any sugesstions please
|
|
|
|
|
go to the properties of the window and set the Window State property to Normal.
|
|
|
|
|
Hello everyone,
In my local computer, if I know the sub-web site name is "MyTestSite" under the Web Sites category of IIS manager, how could I retrieve the absolute physical file path for the sub-web site?
thanks in advance,
George
|
|
|
|