|
actualy i just changed capture to my dragging and it worked however the mouse position does move slightly in relation to the form when i drag it around alot but for the most part it works how i want it to any ideas how to prevent the mouse from drifting off?
|
|
|
|
|
I'm not experiencing any mouse drif but I'm testing this with an empty form. If your form has controls that could intercept mouse events and therefore not reaching the form hanlders, it could be cause of a small drift. I'm not too sure about it though.
Check that, I dont think that could be the cause. The only sympton would be that depending where u click, the form would capture the mousedown and move or it wouldn't do anything.
What is ur form's control layout if any?
|
|
|
|
|
atm it the form inherats a base class that is a form with a custom gripper control the gripper is the thing actualy is reciving my mouse click and mouse move message the mouse seems to drift when i move the mouse really fast or when i move the window beyond the edge of the visible screen and yes i do have docked control in my parent
what i am trying to do is create my own docking windows so far its going well except for this mouse positon stuff :p
|
|
|
|
|
hey on a similar topic how would i determine whether or not my child is at or beyond the parents rectangle
if(this.ClientRectangle.Top <= this.MdiParent.ClientRectangle.Top)
MessageBox.Show("Hi");
i tried this but it always message boxs me no matter where i drop the form
|
|
|
|
|
Check my original post. I modified the post and implemented a mouse clipping that prevents u from moving the mouse outside the parentform if a child form is captured.
This only prevents ur mouse exiting the parent form when moving a child. If u want to detect when the child form begins to go past the parent window I would work with screen coordinates similar to what I did with the mouse clipping.
For example: The parent client rectangle in Screen coord would be:
clientRec = new Rectangle(this.MdiParent.PointToScreen(this.MdiParent.ClientRectangle.Location),this.MdiParent.ClientRectangle.Size);
Your child form rectangle (including none client areas) would be:
childRec=new Rectangle(this.PointToScreen(this.Bounds.Location),this.Bounds.Size);
Then it would be a matter of comparing when one crosses over the other. Top, Bottom, Left and Right.
There could be a problem with the parent's client rectangle. Its not always the same size as the MdiChildContainerWindow. Some docked controls like a StatusBar shorten the MdiChildrenWindow but dont afect the form's clientSize.
A way to get around this is to iterate through the control collection of ur parent form until u find the one with the type 'System.Windows.Forms.MdiClient' (You tipically do this after the InitializeComponents method in your constructor and store the MdiClient control in a private class member that u can access whenever u want without having to search through the control collection again and again). This control is automatically added when u set ur form as a MdiContainer. U can then base ur calculations on the MdiClient control's true size and location instead of using the forms ClientRectangle.
|
|
|
|
|
i have been able to compare locations thanks to your suggestion and it does work
however toolbars statusbars and docked controls seem to not affect it wahts the easiest way to determen the size of the visible mdi area thats not a docked control/toolbar/statusbar?
i appreciate all your help it has been most usefull
|
|
|
|
|
Use the following code in ur Parent form:
private MdiClient myMdiClient;
public ParentForm()
{
InitializeComponent();
foreach (Control ctrl in this.Controls)
{
if (ctrl is MdiClient)
{
myMdiClient=(MdiClient)ctrl;
break;
}
}
}
public Rectangle MdiClientScreenRectangle
{
get
{
return this.RectangleToScreen(myMdiClient.ClientRectangle);
}
}
(I'm supposing u have setted the parent form as a MdiContainer through the designer. If not, run foreach code AFTER setting the IsMdiContainer property to true).
Once u've done this, use the follwing rectangle to compare with ur child form's rectangle:
Rectangle parentRectangle=((ParentForm)this.MdiParent).MdiClientScreenRectangle;
|
|
|
|
|
Heyas all,
I'm attempting to insert data entered into text boxes into a
table. I'm looking at examples and I come across something
like the following
<br />
SqlCommand Command = new SqlCommand("insert into katalog(Program Name, Publisher, Category, Disk Number, Date Added) Values ('value', 'value', 'value', 'value', 'value')", myConnection);<br />
The question is, how would I insert the text currently in the
the textbox? in other words, how do I replace 'value' above with the statement textbox1.text?
thanks all
"There are 10 types of people in this world; Those that know binary and those that do not."
|
|
|
|
|
Always use parameterized queries, and for the SQL provider for ADO.NET that's very easy (ADO.NET supports paramterized queries, but some providers provide better support).
For example:
using (SqlCommand cmd = myConnection.CreateCommand())
{
cmd.CommandText = @"insert into katalog
([Program Name], Publisher, Category, [Disk Number], [Date Added])
values (@name, @pub, @cat, @num, @date)";
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 40).Value = txtName.Text;
cmd.Parameters.Add("@pub", SqlDbType.NVarChar, 40).Value = txtPub.Text;
cmd.Parameters.Add("@cat", SqlDbType.NVarChar, 40).Value = txtCat.Text;
try
{
cmd.Parameters.Add("@num", SqlDbType.Int).Value = int.Parse(txtNum.Text);
}
catch (FormatException)
{
MessageBox.Show("Please enter a valid serial number.");
}
try
{
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Parse(txtDate.Text);
}
catch (FormatException)
{
MessageBox.Show("Please enter a valid date.");
}
try
{
myConnection.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("Error: could not update the database.\n" + ex.Message);
}
finally
{
myConnection.Close();
}
} This is a very simplistic example, but you can learn more by reading about ADO.NET in the .NET Framework SDK that was installed by default with Visual Studio .NET or the stand-alone SDK installer, and is available online at http://msdn.microsoft.com/library[^].
Again, note that different providers provide slightly different support for ADO.NET features like parameterized queries and transactions, so be sure to read about the classes under the System.Data namespace, along with its child namespaces.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hi all. I'm trying to pass some info from the client app to the remote singlecall object via Context, using CallContext.SetData / GetData.
I've created the following ConxtextDataObject:
[Serializable]
public class CallContextData:ILogicalThreadAffinative
{
private string myData;
public CallContextData()
{
}
public string Data
{
get
{
return myData;
}
set
{
myData=value;
}
}
public override string ToString()
{
return myData;
}
}
In my AssemblyInfo file, the only security attribute I've included is:
[assembly: PermissionSetAttribute(SecurityAction.RequestMinimum, Name="FullTrust")]
I go ahead and set the context data, but when I make the remote object call, I always get the following expection: Error message would translate to "Due to security restrictions, the type Vigila.Objects.CallContextData cannot be accessed."
{"Por restricciones de seguridad, no se puede obtener acceso al tipo Vigila.Objects.CallContextData." }
[System.Runtime.Serialization.SerializationException]: {System.Runtime.Serialization.SerializationException}
System.Object: {System.Runtime.Serialization.SerializationException}
_className: "System.Runtime.Serialization.SerializationException"
_COMPlusExceptionCode: -532459699
_exceptionMethod: <undefined value="">
_exceptionMethodString: "8\0GetSafeUninitializedObject\0mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\0System.Runtime.Serialization.FormatterServices\0System.Object GetSafeUninitializedObject(System.Type)"
_helpURL: null
_HResult: -2146233076
_innerException: {"Error de solicitud." }
_message: "Por restricciones de seguridad, no se puede obtener acceso al tipo Vigila.Objects.CallContextData."
_remoteStackIndex: 1
_remoteStackTraceString: "\nServer stack trace: \n at System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(Type type)\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject(ParseRecord pr)\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse(ParseRecord pr)\r\n at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)\r\n at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)\r\n at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, IMethodCallMessage methodCallMessage)\r\n at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage metho
dCallMessage)\r\n at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.UnsafeDeserialize(Stream serializationStream, HeaderHandler handler)\r\n at System.Runtime.Remoting.Channels.CoreChannel.DeserializeBinaryRequestMessage(String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel)\r\n at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)\n\nException rethrown at [0]: \n"
_source: "mscorlib"
_stackTrace: {System.Array}
_stackTraceString: null
_xcode: 0
_xptrs: 0
HelpLink: null
HResult: -2146233076
InnerException: {"Error de solicitud." }
Message: "Por restricciones de seguridad, no se puede obtener acceso al tipo Vigila.Objects.CallContextData."
Source: "mscorlib"
StackTrace: "\nServer stack trace: \n at System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(Type type)\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObject(ParseRecord pr)\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse(ParseRecord pr)\r\n at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)\r\n at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)\r\n at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()\r\n at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, IMethodCallMessage methodCallMessage)\r\n at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, IMethodCallMessage methodCallMessage)
\r\n at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.UnsafeDeserialize(Stream serializationStream, HeaderHandler handler)\r\n at System.Runtime.Remoting.Channels.CoreChannel.DeserializeBinaryRequestMessage(String objectUri, Stream inputStream, Boolean bStrictBinding, TypeFilterLevel securityLevel)\r\n at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)\n\nException rethrown at [0]: \n at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)\r\n at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)\r\n at Vigila.Objects.IDataLayerTool.GetAssetsMenuLayout()\r\n at Vigila.Objects.SingleCallManager.RunMethod(String methodName, Object[] arguments) in d:\\proyectos .net\\código aplicacione
s\\vigila 2\\vigila objects\\singlecallmanager.cs:line 113\r\n at Vigila.Client.VigilaStartUp.loadUpIniData() in d:\\proyectos .net\\código aplicaciones\\vigila 2\\vigila client\\vigilastartup.cs:line 62\r\n at Vigila.Objects.ThreadWorker.workingEnvelope() in d:\\proyectos .net\\código aplicaciones\\vigila 2\\vigila objects\\threadworker.cs:line 157"
TargetSite: {System.Reflection.RuntimeMethodInfo}
I've tried demanding a PermissionSecurity with the Infrastructure Flag right before the remote call to see if I would get an exception for not having the required permissions, but that doesnt seem to be the problem.
I'm out of ideas...anybody knows whats going on?
|
|
|
|
|
In which project's AssemblyInfo.cs file did you add that assembly-level declarative security attribute? The client or the server? If the code even runs at all, it's not a code access security problem. When the CLR loads your assembly it will demand for that permission set. If the demand fails, the assembly is not loaded. It'll never even get to your remoting code. To grant this permission set you'll need to run the client off your local machine (by default, local code runs with FullTrust permissions) or create a code group to grant your code (via whatever evidence seems suitable) the FullTrust permission set.
So, have you tried debugging your code to make sure it's even loading?
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hi Heath, thanks for the reply.
Both Client and Server run on my machine and for sake of simplicity for the time being both assemblies and two other dlls (remote objects and general tools) are all linked to the same AssemblyInfo file so they all have the same set of permissions.
My ContextData object is included in the 'general tools' dll.
Code worked perfectly, and if I remove all CallContext code (the setter in the client app and getter in the remoteobject called method) everyting works perfectly again. The error seems to be when the remote call is made and before anything starts visibly 'moving' on the server side. A breakpoint in my remote object constructor (its a singlecall obj) is never reached.
P.D. Both server and client app startup perfectly so the 'FullTrust' permission set is granted for both apps.
|
|
|
|
|
Skynyrd wrote:
are all linked to the same AssemblyInfo file so they all have the same set of permissions.
I'm sure you know this, but just in case and for future readers I note that using the same file won't grant any permissions. That happens at runtime. This approach just means they'll demand (or whatever action is appropriate) the same permissions.
Could you post your remoting configuration (or, if programmatically, include the important details like the channel and connection string, the formatter you're using, etc.)? What hosts the remoting singleton? A Windows service, IIS, or just some app that blocks until you quit (like all those console examples in the remoting books)?
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
The server app is for debugging purposes a Console App at the moment. The remoting is done through an interface:
relevant server code:
...
TcpServerChannel myChannel=new TcpServerChannel(8086);
ChannelServices.RegisterChannel(myChannel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(DataLayerTool),"DataLayerTool.rem",WellKnownObjectMode.SingleCall);
...
relevant client side app:
...
private object GetProxy()
{
return Activator.GetObject(myType,myUrl);
}
public object RunMethod(string methodName, object[] arguments)
{
CallContextData cookie=new CallContextData();
cookie.Data=myUser.EncryptedUserName;
CallContext.SetData("myUser",cookie);
object proxy=GetProxy();
TypeDelegator delegator=new TypeDelegator(myType);
return delegator.GetMethod(methodName).Invoke(proxy,arguments);
}
...
Client remoting config file:
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" port="0">
<clientProviders>
<formatter
ref="binary"
/>
</clientProviders>
</channel>
</channels>
<client>
<wellknown type="IDataLayerTool, Vigila Objects"
url="tcp://localhost:8086/DataLayerTool.rem" />
</client>
</application>
</system.runtime.remoting>
</configuration>
|
|
|
|
|
Duh...figured it out...
kinda stupid of me
I was strong naming my assemblies (thought the code in the assemblyinfo file was commented out...) and I was getting the security exception possibly because I wasnt fully qualifying my assemblies in the client remoting configuration file.
Commented out the strong naming and everything works fine.
|
|
|
|
|
I wouldn't comment-out strong name attributes. Strong naming is your friend. Not only does it help you (and your clients) secure their machines and allow your code individually to have its own permissions, but it also helps you version and allows you to install into the GAC.
If you get tired of the ever-changing version numbers, then don't use automatic versioning (I always use explicit versions, especially in multi-project solutions). Instead of using a version string like "1.0.*", be explicit with all 4 segments (from 0-65535; each segment is an unsigned short). This gives you control over versions.
How does it help with versioning? Read about Publisher Policies[^].
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Thanks Heath.
Yes I normally always use StrongNaming but I think that the early stage at which my project is right now, I can do without it. Anyhow, explicit versioning would solve the problem. Will try it out.
|
|
|
|
|
I've tried out explicit versioning but I still get the same exception: These are the remoting config files I'm using:
Server side:
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown
type="Vigila.Remoting.DataLayerTool, Vigila.Remoting, Version=0.0.1.0, Culture=neutral, PublicKeyToken=caa4a15766f8ec1a"
objectUri="DataLayerTool.rem"
mode="SingleCall"
/>
</service>
<channels>
<channel
ref="tcp"
port="8086"
/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Client Side:
<configuration>
<system.runtime.remoting>
<application name = "Vigila client">
<client>
<wellknown
type = "Vigila.Objects.IDataLayerTool, Vigila.Objects"
url = "tcp://localhost:8086/DataLayerTool.rem" />
</client>
<channels>
<channel
ref="tcp"
port="0"
/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
If I try to include Version, culture and public key info of the Vigila.Objects assembly in the client config file:
"Vigila.Objects.IDataLayerTool, Vigila.Objects, Version=0.0.1.0, Culture=neutral, PublicKeyToken=caa4a15766f8ec1a"
, I get the follwoing RemotingException telling me that Client WellKnow entries dont admit full names (version, culture and key)
!? dont know if this is normal. If u need details of exception I'll post them, but wont do it now because its too long.
Anyhow, when I run the app, I'm getting exactly the same exception I posted in the first message: SecurityExpection due to the CallContexData object I'm using (see my first post please). Am I supposed to include info of this object in the client and server remoting config files somehow? and if so, how? Or what am I missing?..all examples I see of CallContext are without strongnaming, and I know my code works perfectly in that case, but I cant find any examples where StrnongNaming is used with CallContext.
|
|
|
|
|
Interesting. I've never actually had this problem and have always used strong naming. You might try this, though.
Continue using the partial names (fully-qualified class name, followed by the assembly name) but define the following in your .config file:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="Vigila.Objects"
fullName="Vigila.Objects, Version=0.0.1.0, Culture=neutral, PublicKeyToken=caa4a15766f8ec1a" />
</assemblyBinding>
</runtime>
</configuration> Of course, do this for each assembly that needs qualifying.
Without knowing more about your problem, it's possible that if you don't update your server and client versions (you might consider not changing the version every time you compile - figure out a scheme that works for you) at the same time and they use a separate copy of a shared assembly - and you don't update both copies at the same time, leading to different versions - you could end up with a serialization error since the types won't match (even if they're only off by a version number, they're still different types). I'm just speculating, however.
In a typically deployment scenario, you can get around versioning problems (rather, so you can update some assemblies without updating others) with publisher policies (see the .NET Framework SDK for more details). To get around the incompatibilities in the serialization, you can use a SerializationBinder and overriding BindToType (you can actually write generic code to handle any type thrown at it; it should be obvious but if you want, click "Search comments" to search for "BindToType" for a previous example I posted).
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Thnks for the advice. I tried the new config u posted but its not working either.
Anyhow, I've been looking around in the net and I'm not the only one who's come up with this problem. It's apparently a Net v1.1 issue due to new security features in remoting not implemented in v1.0. After searching for a while I've come up with two solutions:
First one isn't any good: its using the Assembly AllowPartiallyTrustedCallers attribute in my Objects.dll where the DataCallContext object is. The code works this way but it shouldnt be the solution to my problem unless there is absolutely nothing else I could do.
Second one is most probably the correct way to solve the problem: explictly change the server formatter's FilterLevel to 'Full'. (defualts to 'Low').
...so, in case anybody else has this problem and stumbles upon this post while searching the forum, the problem will be fixed if they configure the server remoting config file similar to the following:
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown
type="Vigila.Remoting.DataLayerTool, Vigila.Remoting, Version=0.0.1.0, Culture=neutral, PublicKeyToken=caa4a15766f8ec1a"
objectUri="DataLayerTool.rem"
mode="SingleCall"
/>
</service>
<channels>
<channel ref="tcp" port="8086">
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Thanks for all the help.
|
|
|
|
|
I want to display the version information in the About screen of my application. What I thought was the way to do this did not work:
System.Reflection.AssemblyName myAssName = new System.Reflection.AssemblyName();
MessageBox.Show("Major:"+myAssName.Version.Major.ToString()+"\nMinor:"+myAssName.Version.Minor.ToString()+"\nBuild:"+myAssName.Version.Build.ToString()+"\nRev:"+myAssName.Version.Revision.ToString());
but this does not work.
The other way works:
System.Diagnostics.FileVersionInfo myFVI = System.Diagnostics.FileVersionInfo.GetVersionInfo("SBoxCollect.exe");
MessageBox.Show("Major:"+myFVI.FileMajorPart.ToString()+"\nMinor:"+myFVI.FileMinorPart.ToString()+"\nBuild:"+myFVI.FileBuildPart.ToString());
But it seems like a lot of work to have to specify the (path and) name of the exe file.
Any comments regarding this would be great or maybe show me a better way to do this.
I noticed that FileVersionInfo can not be used in Windows CE. How can I do this in Windows CE?
Thanks,
Einar
|
|
|
|
|
I do not know about WinCE, but you can try to get assembly name of your file. In your first example you're creating new AssemblyName object, but not taking your currently running assemly info. You can use something like this:
System.Reflection.AssemblyName myAssName = System.Reflection.Assembly.GetExecutingAssembly().GetName();
This will give you AssemblyName of your file and you'll get your version bumbers without errors in normal windows. As I've mentioned above - I don't know about CE...
Hope it'll help...
Robin Panther
|
|
|
|
|
Of course it won't work - you must get an AssemblyName for the assembly that you want to display information about. If you simply initialize it, it would be empty.
A simple way to get the AssemblyName is like so:
AssemblyName asmName = this.GetType().Assembly.GetName(); Note, however, that the assembly version (AssemblyVersionAttribute ) and file version AssemblyFileVersionAttribute ) may be different. Most third-party assemblies don't differ, but some do and we do here at Microsoft (so that third-party libraries and applications that depends on our assemblies (the base class library, or BCL) don't have to use a publisher policy to redirect version binding).
Also, a word about performance: store the Version as a local varaible and don't keep referencing the AssemblyName to get to it. This results in about 2 less instructions per access and makes for much more readable code.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hey
I've made a sort of compiler in c# and it works generally. I'm stuck because when I try to add a directx reference it spews out an error:
"Compilation failed:
error CS0006: Metadata file 'Microsoft.DirectX.Direct3D.dll' could not be found"
Thanks
|
|
|
|
|
First make sure you've installed Managed DirectX 9.0c (autumn 2004).
Once that is installed, you should be able to find a DirectX folder in C:\WINDOWS\Microsoft.NET\DirectX, which should contain your DirectX dlls. If not, you're going to have to extract them from the GAC, which is a pain, but you can get at them from the command line (i.e. won't work in windows explorer).
Any remotely useful information on my blog will be removed immediately. There are 10 kinds of people in the world. Those who have heard of the ubiquitous, overused, worn-out-like-an-old-shoe binary "joke" and those who haven't.
Judah Himango
|
|
|
|
|