|
I'm assuming that each field is a string, so you need to use dr[column].ToString() after, of course, checking that the return value of dr[column] isn't null (so you're not, essentially, calling null.ToString() , which throws a NullReferenceException , a far too oftenly seen exception that should never be thrown to users).
You need to use the same type or the value can't be set.
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]
|
|
|
|
|
that is allready being tested at
if (dr[column] != System.DBNull.Value)
but when i place
contact.GetType().GetField(column, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public).SetValue(contact,"test");
that doesn't work also not and yes each field is a string it is really weird why it doesn't work....
greetings
Sander
|
|
|
|
|
An exception should be thrown. You don't have this code in try-catch already, do you? If the field can't be found, an exception is thrown. The the value type and field types don't match, an exception is thrown. If any of the objects are null an exception is thrown.
Setting values through reflection works - I've done it hundreds of times in a very similar fashion. What I'm not seeing is the relevent code necessary to see what is wrong. You posted your for loop, fine. But what about the contact variable type?
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 field is found that is not the problem it returns nice a fieldinfo object and setting the value also doens't throw a exception. It's really weird everything looks allright but the value isn't set.
|
|
|
|
|
What does FieldInfo.MemberType return?
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]
|
|
|
|
|
MemberType = Field
it says in the watch in visual studio
|
|
|
|
|
I'm sorry, I meant FieldInfo.FieldType .
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]
|
|
|
|
|
+ FieldType {"System.String"} System.Type
|
|
|
|
|
The GetType method returns a Type object, and that is what you are working with, not your contact object.
|
|
|
|
|
I have been trying to use the secondary buffer in dx 9's directSound to play back short wav files. In particular I want to play a tic sound to denote a second of time having taken place. The problem that I am having is that the routine will play fairly long sounds but will not play sounds that are approximately less than 1k in length. Instead it throws an exception and declares that the buffer is too small.
Does anyone know any more information about this scenario? What are my options?
Thanks for any advice.
Codesmith
|
|
|
|
|
Here is an example of the code that I am using to perform this task:
private DS.Device snd;
private DS.SecondaryBuffer tic;
snd = new DS.Device();
snd.SetCooperativeLevel(this, DS.CooperativeLevel.Normal);
tic = new DS.SecondaryBuffer(MediaUtilities.FindFile("tic.wav"), snd);
tic.Play(0, DS.BufferPlayFlags.Default);
For average size wav files this routine works fine but for short ones it throws the buffer too small exception.
|
|
|
|
|
:smirk: Leave it to me to answer my own question eventually. Just in case someone out there runs into the same problem that I did I guess I will throw this out there.
It turns out that DirectSound Secondary buffers can perform Effects Processing... but in order to do so the sound file must be at LEAST a certain size. Since I am loading tiny .wav files the bufferTooSmall exception is getting tossed.
The buffer size is not great enough to enable effects processing.
So now the question is thus, will disabling effects processing be enough to make this error go away? Or can I just catch it and ingore it?
|
|
|
|
|
I have created this C#.NET windows services. This windows service watchs the file system to see if any word documents has been changed or moved directories. This it has then it puts a timestamp sentence in the word document.
This problem is this. I created a C#.net dll or the word portion or the application. Now when I test this dll out with a windows application it works great. But when I call the dll from my windows service it seems to hang. The winword.exe just hangs and so the does the code in the dll. Does anyone know why?
Nicholas Ingratta
ningratt@hotmail.com
|
|
|
|
|
The service needs to run either as a particular user (not the default SYSTEM) or has to be able to interact with the desktop (if a user is currently logged in; the former approach is better if you don't want to require that the machine be logged into 24/7/365.25).
If you're using the ServiceInstaller and ServiceProcessInstaller , you can do this in code (NEVER hard-code your password; accept it from the command-line where the parameters are passed to you through the Context.Parameters property (Context is actually a property of the Installer class, which you extend for your own installer).
If there is no window station associated with the user context, the Windows application cannot start (there's no window manager).
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]
|
|
|
|
|
in my project I have serviceProcessInstaller1. If I look at the properties which ones to I have to change then.
This does not really make sense to me since this is windows service and a user may never log in or a desktop ever be used.
Is there anyway you could walk me through some of the steps. Thanks for the help
Nicholas Ingratta
ningratt@hotmail.com
|
|
|
|
|
It should be obvious: Username and Password .
It makes perfect sense if you understand Windows. Word is a Windows program. Whether or not it is visible, it requires a Window manager. If a service isn't associated with a user login - or can't interact with the currently logged in user - there's no window manager and the Windows program (i.e., Word) won't run.
So, you need to run your service as a user that can log in interactively. This doesn't mean that a login session as you'd normally see it as a human user would exist, just that the system impersonates the user given their credentials and creates a window station under that user's contect. This is necessary.
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]
|
|
|
|
|
I tried what you said and that worked great. Word actually will run and not hang. But now I seem to have another issue. My word class for some reason gets an error everytime I try to add a paragraph at the end of the document. The error I recieved is "The Server threw an exception". Here is my code. I guess I am doing something wrong. It always fails that the with wordPara.Range.Text = "whatever". Could you help me out again.
wordApp = new Word.ApplicationClass();
wordApp.Visible = (bool) isVisible;
if ( wordApp != null )
{
wordDoc = wordApp.Documents.Open(ref _fileName,ref missing,
ref readOnly,ref missing,
ref missing,ref missing,ref missing
,ref missing, ref missing
,ref missing, ref missing,
ref isVisible,ref missing,
ref missing, ref missing);
object wordRng = wordDoc.Bookmarks.Item(ref oEndOfDoc).Range;
string strDateTime = DateTime.Now.Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.Year.ToString() + " "
+ DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString();
Word.Paragraph wordPara;
wordPara = wordDoc.Content.Paragraphs.Add(ref wordRng);
//it fails right after this comment
wordPara.Range.Text = "Original electronically authenticated by " + physName + " on " + strDateTime;
wordPara.Range.Font.Bold = 1;
wordPara.Range.InsertParagraphAfter();
if ( sign && ( signLocation.Length > 0 ) )
{
wordRng = wordDoc.Content.Paragraphs.Last.Range;
wordDoc.Content.InlineShapes.AddPicture(_fileSignature, ref missing
,ref missing, ref wordRng);
}
wordDoc.Save();
wordDoc.Close(ref missing, ref missing, ref missing);
wordApp.Quit(ref TBoolean, ref missing, ref missing);
Nicholas Ingratta
ningratt@hotmail.com
|
|
|
|
|
IIRC, you have to create a range first. The range would be over the paragraph you added, but, by default, does not encompass the paragraph. Again, IIRC.
The best thing to do is read the VB documentation for Word (the very same objects and types that VB6 uses (automation objects) are the same that the .NET RCW (runtime-callable wrapper) uses, though in a few cases classes may be represented a little differently).
In the future, when you start a new question (and this is a new - but related - question), please post a new question.
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]
|
|
|
|
|
I thought this code
object wordRng = wordDoc.Bookmarks.Item(ref oEndOfDoc).Range;
already creates the range
|
|
|
|
|
It may. Like I mentioned, you should read the VB documentation for the Word object model (the best place is in the Word help itself if you installed the developer documentation; the documentation - if you can find it - in the MSDN Library isn't very specific (and like I implied, hard to find the right docs)).
If the COM server (Word) is throwing an error, though, something isn't right. Based on your code it seems similar to a NullReferenceException in .NET, except that your proxy object isn't null but the associativity of it may be empty in the Word COM server. That's why the Range object came to mind first.
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]
|
|
|
|
|
I printed out the stack trace it looks like this
at Word.Range.set_Text(String prop)
at com.vmi.CardioIMS.Document.WordClass.SignDocument(String docName, String docLocation, String physId, String physName)
Nicholas Ingratta
ningratt@hotmail.com
|
|
|
|
|
What is this: com.vmi.CardioIMS.Document.WordClass.SignDocument ? If you use the official Primary Interop Assemblies for Word 10 (XP) from MSDN[^] you would not see this. This looks like some third-party solution (perhaps part of your solution).
Using official PIAs from the COM server publisher is always a good idea and, when installed (i.e., for Office XP PIAs run the batch file to register them correctly), get used any time you would normally create your own. These are tested and, sometimes, may even be custom RCWs.
Office 2003 will be compatible in most cases with the XP typelib (where your RCW comes from) but do install their own PIAs if you choose ".NET Framework Developer Support" as a feature. Generally, using older typelibs for properly implemented COM servers (like Office) will support newer implementations unless older interfaces have been deprecated (happens rarely in Office; the basic stuff has almost always been around).
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]
|
|
|
|
|
com.vmi.CardioIMS.Document.WordClass.SignDocument is just a class that uses the Micrsoft Word 10.0 object library to open up word and add a paragraph.
I am just frustrated since this code was working before. You do not need to use the Interop Assemblies. Plus the code I am partially using is from a Microsoft web site.
Nicholas Ingratta
ningratt@hotmail.com
|
|
|
|
|
Yes, you do need to use Interop assemblies. That is what you're doing. .NET is not a COM client and requies a wrapper. you can write your own RCWs, but they're required nonetheless. The PIAs I'm talking about are from Microsoft and tested. The interop assemblies you created when you referenced the Word 10 library in Add References (VS creates them automatically; just expand your References under your project) are probably the same but, unless you set up your signing key in the project under VS, are not signed (meaning that stricter code access policies may block the interop assemblies from being loaded).
Again, it's only a recommendation to use PIAs. Either way you're using interop assemblies.
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]
|
|
|
|
|
Yeah, I'm stuck with a similar issue The only way to interact with desktop is either using localsystem, or user, but user doesnt allow interactive startup either it appears.
Found this on MSDN:
ServiceType Enum
The creation of interactive services is not supported. To workaround this, you can create a non-interactive service and a separate control GUI application that communicates with the service using sockets or remoting. For code samples on remoting, see Remoting Examples.
So it seems you will still need some form of extra application...
top secret Download xacc-ide 0.0.3 now! See some screenshots
|
|
|
|