|
Member 3357336 wrote: While debugging or otherwise, How can I test this function in Visual Studio 2010
You can only debug one thing at a time. What does "test" mean here? You could add a watch to show it's return value during debugging
Bastard Programmer from Hell
|
|
|
|
|
Thanks for replying. "Test" simply means that I want to call this function and debug it's guts. Please note that users in this forum are taking this function literally. It's not the attributes of the function I am interested in but the way this could be debugged in VS2010. I could have a very "Generic", (shared) extremely lengthy format or compute function that I want to debug
I am still not sure on how to do this so please help
Regards
P.s. I really don't want to call this function while executing my complete program and calling with a button or anything similar. Simply go to a screen call the function and be able to debug it
|
|
|
|
|
The accepted way to test functions is to write unit tests, which you can call using test harnesses. There are whole books out there on the subject; what you really want to look at is unit testing c# and test driven development.
|
|
|
|
|
Thanks. This is exactly what I wanted to know. I simply created a unit test and that did it for me
Regards & Thanks to all who replied
|
|
|
|
|
You're welcome. Glad to be of service.
|
|
|
|
|
I have a DLL written in Visual C++ 6.0. I have a MFC test application which calls this DLL and it works fine. I also have a .NET C# WinForms test app which calls this DLL. I am importing the DLL and calling it successfully. I can see that the DLL is called correctly and all parameters are passed successfully. The DLL works for a time and then fails when trying to create a COM component by calling CoCreateInstance. This fails with an Access Violation. This doesn't happen when called from the MFC app.
Why does this happen in the .NET app and how do I solve it?
|
|
|
|
|
Could you provide some more detailed information about how you use this from C#? Could you also provide more details about what kind of error you see when trying to use the dll?
If my COM-memory is not totally wrong, CoCreateInstance() cannot be called until the calling thread has called CoInitalize(). Could that be your problem?
//daniel
|
|
|
|
|
Hi all,
Please provide steps to call a Delphi dll from vb.net. Any help is very much apprecited. Thanks alot.
Following I have tried and no luck.
1) Added the DLL as a refernce to the project.
-Shows an error message "Please MAke Sure that the file is accessible , and that it is a valid assembly or COM Component"
2) Used the DllImport method of System.Runtime.InteropServices
<DllImport("delphiProgram.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
Public Shared Function TestFunction(ByVal strTif As String) As Long
-- Runtime it shows an error message "Unable to load DLL 'delphiProgram.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"
3) used the tlbimp.exe to make the dll as an interop
-- Shows a message 'delphiProgram.dll' is not a valid type library.
Thank you.
Regards,
Rijz
|
|
|
|
|
The .DLL has to be in the same folder as your .EXE or in a folder on the PATH environment variable.
Chances are, it's not in either. You can add the .DLL to your project and, in the Properties window under "Copy to Output Directory", make sure it says "Copy Always" so the .DLL ends up in your project Debug or Release folder with your .EXE.
|
|
|
|
|
Tested with Lazarus;
library project1;
uses
Classes;
procedure DoHelloWorld(var Source: string) stdcall; export;
begin
Source := 'Hello world :)';
end;
exports DoHelloWorld;
begin
end.
Imports System.Runtime.InteropServices
Imports System.Text
Module Module1
<DllImport("project1.dll", EntryPoint:="DoHelloWorld", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Ansi)> _
Public Sub DoHelloWorld(ByRef Source As StringBuilder)
End Sub
Sub Main()
Dim sb As New StringBuilder()
DoHelloWorld(sb)
Console.WriteLine(sb.ToString())
Console.ReadKey()
End Sub
End Module
Bastard Programmer from Hell
|
|
|
|
|
I have requirement where user can pass all types of datetime formats. Also I need to validate all the datetime formats entered by user.
DateTime.TryParse() returns false, if the date passed is in dd/MM/yyyy format. I have noticed in all the forums this issue is been noted.
Can anyone reply why this error is been thrown and whats the solution so as to pass all datetime formats
|
|
|
|
|
I am unable to replicate the issue at my end.
The sample code I used to test it (form contains a textbox for input, a button with the test code below, and a label to display the result):
DateTime getDate;
bool valid = DateTime.TryParse(textBox1.Text, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out getDate);
if (valid)
label1.Text = getDate.ToLongDateString();
else
label1.Text = "Not a valid date";
I can enter various formats, using either a number for the month or the short-hand notation or the long notation and it all works fine.
Could you tell me exactly what input doesn't work properly, for instance when you try this code?
|
|
|
|
|
schampacc wrote: I have requirement where user can pass all types of datetime formats.
Forget about the code for a moment and think about this.
What is meant by
1) 04/05/2011
2) 05/04/2011
Both could mean either 4 May 2011 or 5 April 2011 and it's likely that even the Startrek Universal Translator cannot solve this fundamental problem.
Alan.
|
|
|
|
|
It returns true for 05/04/2011 but returns false for 25/04/2011
|
|
|
|
|
And does it return true for both 04/05/2011 and 04/25/2011?
How the date/time is interpreted depends on the locale used. This is good, cf. Star Trek Universal Translator in previous post.
|
|
|
|
|
yes it returns true for both the cases, since both will be considered as MM/dd/yyyy
|
|
|
|
|
schampacc wrote:
It returns true for 05/04/2011 but returns false
for 25/04/2011
With that information I can deduce that your system's Culture uses MM/dd/yyyy format and it shouldn't be a surprise that TryParse rejects a month number of 25.
When the day number is less than 13 it is not possible to understand a date without prior knowledge of the Culture. Therefore I can guess that "25/04/2011" is 25 April 2011 but I can't say whether "05/04/2011" is 5 April or 4 May unless I know the field order within the string.
Alan.
|
|
|
|
|
schampacc wrote: pass all types of datetime formats
That isn't possible.
Different cultures expect different forms of dates and those forms are not deterministically unique without additional information.
So either you must limit the possible forms or you must provide a way for the user (or user app) to tell you what form is expected.
There is no other possibility.
|
|
|
|
|
Hi All,
I have found the solution to support all datetime formats.
First I need to inform is that datetime objects uses the system culture by default.
But we have a solution for this. You can loop in all the cultures available and check if the passed datetime is in valid format or not by using the below code.
DateTimeStyles styles = DateTimeStyles.None;
DateTime startDate;
foreach (CultureInfo cInfo in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
DateTime.TryParse("stringDate", cInfo, styles, out startDate)
}
|
|
|
|
|
Will you still not have problems when the day number is less than 13? 04/05/11 and 05/04/11 will probably be ok with several cultures?
//daniel
modified on Tuesday, September 13, 2011 5:06 AM
|
|
|
|
|
Thats right. Then in this case one should go for one particular format only.
The issue was to validate the date is in valid dateformat or not. It can be in any valid dateformat.
This issue can be solved using the above loop.
|
|
|
|
|
schampacc wrote: Then in this case one should go for one particular format only.
And your test still doesn't hold up. Take a look at 4/20/2011. Is that a valid date of the form April 20th or an invalid date when someone tried to enter the 4th day of the 20th month?
|
|
|
|
|
This is not the way to solve this - in fact, it's an incredibly naive solution. As an example, 9/11/2001 - what happened on that day? It was either a terrible disaster in America or a very quiet day in November. You should use the universal datetime format in your application, which is agnostic of ALL cultures.
|
|
|
|
|
Do you mean to define the datetime object as DateTime.UTC?
|
|
|
|
|
I mean that the date should conform to ISO 8601.
|
|
|
|