|
I see that the calling code is searching for a specific version of OpcRcw.Dx.dll
Now is it the calling code wrongly searching an old/uncompatible version or is it simply the OpcRcw.Dx.dll of an old version and so to be replaced?
|
|
|
|
|
You set a reference to the RCW version in your project, so that's the version the code is looking for.
|
|
|
|
|
I took the "new" OPC libraries from the folder I was speaking some posts ago installed I guess by the factory talk gateway and they are version
2.1.106.0 . Then I copied them within the opportune "solution" folder overwriting the old ones. Then I added the reference to them to the app. Now I get compiling errors that I cannot decode. I attach here one of them.
It is in italian so I try to translate
It was impossible to resolve reference "OpcNetApi, ...." because it was compiled with framework
".NETFramework,Version=v4.5.1" This is successive to the current destination framework v4.0
C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3274: non è stato possibile risolvere il riferimento primario "OpcNetApi, Version=2.1.106.0, Culture=neutral, PublicKeyToken=78aea80f6827b5ab, processorArchitecture=MSIL" perché è stato compilato con il framework".NETFramework,Version=v4.5.1". Questa versione è successiva a quella del framework di destinazione corrente ".NETFramework,Version=v4.0,Profile=Client".
|
|
|
|
|
When you start copying .DLL's all over and setting references to them, you're throwing out all the documented standard procedures and solutions.
I have no idea how this library works, how it behaves in Visual Studio, or how it appears in References.
References does tell you which libraries are referenced. Just click on the reference and look in the Properties window and it'll tell you what the filename is.
As for how to fix this, I can't tell you. I'm not familiar with the library at all. Everything I've said has just come from a Google search.
|
|
|
|
|
Ok
I had to open the app.csproj with notepad and change
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
into
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
Now app compiles. But do you know how to discriminate within an existing project if it is done to work with a certain framework version of .NET or with another (without doing what I did opening with a text editor the .csproj file) ?. And further do you know how to change version to that app or to a new one with the tools of visual studio.
Thank you for the help
Roberto
|
|
|
|
|
Go into the Project Properties and change the Target Framework.
|
|
|
|
|
I have two USB touchscreens connected to a PC. I need a way of detecting which of the two touchscreens was last touched via its HID PID, VID or port. What makes it difficult is that the app that needs to be detecting this will be minimized so will not have the focus i.e. it will not be active. I have experimented with some samples I found online using the RAWINPUT approach with two USB keyboards but that requires the app to be active in order to receive the keyboard events.
The OS that this app will need to run on is both Windows 7 and 10. I am not looking to capture any data from the device but just to know which of the two devices is currently sending data.
Is there a way of doing this using C#?
Thanks.
|
|
|
|
|
I have a simple valid JSON file:
{
"statistiques":
{
"number":20944
}
}
I am using NewtonSoft JSON
and used this example as a starting point:
Deserialize JSON from a file
public class statistiques
{
public int number;
};
string raw = File.ReadAllText(@"C:\data.json");
statistiques allStats = JsonConvert.DeserializeObject<statistiques>(raw);
The resulting AllStats is empty.
Am I missing something ?
Solution:
public class RootObject
{
public Statistiques statistiques { get; set; }
public List<Circonscription> circonscriptions { get; set; }
}
I needed to have a root class.
Thanks.
I'd rather be phishing!
modified 2-Oct-18 15:48pm.
|
|
|
|
|
It seems I have a memory leak in my app. Which I seem to be able to reproduce with this simple console app.
Could anyone tell me what I am missing or where I am mislead?
(FYI, working set is printed about every seconds..)
using System;
using System.Threading;
using System.Threading.Tasks;
namespace CrazyAsync
{
class Foo
{
public Func<CancellationToken, Task> Work;
public async Task DoWork(CancellationToken token)
{
while (!token.IsCancellationRequested)
await Work?.Invoke(token);
}
}
class Mamamia
{
public Task DoIt(CancellationToken token)
{
var t = Task.Delay(6, token);
t.ContinueWith(x =>
{
if (x.Status == TaskStatus.Faulted)
Console.WriteLine(x.Exception.InnerException);
if (i++ % 100 == 0)
{
GC.Collect();
Program.DumpMemory();
}
});
return t;
}
int i = 0;
}
class Program
{
static async Task Main(string[] args)
{
var cc = new CancellationTokenSource(TimeSpan.FromMinutes(1));
var m = new Mamamia();
var foo = new Foo()
{
Work = m.DoIt,
};
await foo.DoWork(cc.Token);
}
public static void DumpMemory()
{
var m = Environment.WorkingSet;
Console.WriteLine($"Mem: {m:#,###}");
}
}
}
[EDIT] my bad, the memory only seems to increase for 2 minutes after all.... must be a wrong lead
modified 2-Oct-18 4:28am.
|
|
|
|
|
My only note would be that CancellationTokenSource is disposable, but that should only impact your cleanup.
"Never attribute to malice that which can be explained by stupidity."
- Hanlon's Razor
|
|
|
|
|
I want code for Sqlite DB Browser Verication Multiple DB verification in entire Data
COde in Windows Form
I tried the code but not Verify the proporlly
|
|
|
|
|
wrote: I want code for This site does not provide code to order.
wrote: I tried the code but not What code? Please edit your question and provide proper details of your problem.
|
|
|
|
|
It doesn't quite work like that.
We do not do your work for you.
If you want someone to write your code, you have to pay - I suggest you go to Freelancer.com and ask there.
But be aware: you get what you pay for. Pay peanuts, get monkeys.
The idea of "development" is as the word suggests: "The systematic use of scientific and technical knowledge to meet specific objectives or requirements." BusinessDictionary.com[^]
That's not the same thing as "have a quick google and give up if I can't find exactly the right code".
So either pay someone to do it, or learn how to write it yourself. We aren't here to do it for you.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
How do I alter my code to generate a 4 by 9 array of random numbers between -2 and 4? It currently is generating a 9 by 9 array of random numbers.
static void Main(string[] args)
{
Random r = new Random();
const int size = 9;
int[,] arr = new int[size, size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
arr[i, j] = r.Next(-2, 4);
Console.Write(arr[i, j] + " ");
}
Console.WriteLine(" ");
}
Console.ReadKey();
|
|
|
|
|
You have a variable, size , with a value of 9. Where's your value of 4 for an array size?
|
|
|
|
|
You need to change this line:
int[,] arr = new int[size, size]; When you create a new array, you specify both sizes in the constructor:
new int[RowCount, ColumnCount]; Your code specifies that both dimensions are the same size, which is fine for a chess board for example, but not what you need for a set of dominos perhaps.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi,
I’m struggling with converting Python code to C#, i have this line in the Python code and I’m not sure how to implement it in C#:
self.httpServ.request('GET', '/loadinst.cgi'%cmd_type, "<EEX Ver='1.0'><CMD type=%s /></EEX>" % cmd)
Wireshark looks like this:
GET /loadinst.cgi HTTP/1.1
Host: xxx.xxx.xxx.148
Accept-Encoding: identity
Content-Length: 119
Data(119)
<EEX Ver='1.0'><CMD type='loadinst' DriverStatusCode='0' emAdapterType='EEXp' id='0' instrumentType='' ipSA='' /></EEX>
and im trying to use:
var URL1 = (URL + cmd);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL1);
request.Method = "GET";
WebResponse response = request.GetResponse();
with no real luck... any idea?
Thanks,
|
|
|
|
|
wrote: any idea? None whatsoever, since we have no idea what "with no real luck" is supposed to mean.
|
|
|
|
|
OK, thanks...
I`m failing to write to the data field, in the original Python code the method is GET and still i see data on the request data field but on the C# code I’m not sure how to get the same capture, im getting something like this, where my data (the commands to the remote system "<eex ver="1.0"><cmd ....")="" been="" attached="" to="" the="" header:
<pre="">GET /loadinst.cgi <EEX Ver='1.0'><CMD ....
Host: xxx.xxx.xxx.148
Accept-Encoding: identity
and the data field is empty, so the remote instrument refuse the connection.
So my question is what is the C# implementation to get something like this:
Hypertext Transfer Protocol
GET /loadinst.cgi HTTP/1.1\r\n
Host: xxx.xxx.xxx.148\r\n
Accept-Encoding: identity\r\n
Content-Length: 119\r\n
\r\n
[Full request URI: http:
[HTTP request 1/1]
[Response in frame: 30]
File Data: 119 bytes
Data (119 bytes)
Data: <EEX Ver='1.0'><CMD...
[Length: 119]
thanks for the help...
|
|
|
|
|
Hi,
I am currently learning C#, and have been asked to switch 2 variables values, (make x be y and y be x), I have done this with a temp variable, but i need to do it without the temp variable involved. How exactly is this done???
|
|
|
|
|
Can't tell you exactly because this is your homework. All I can tell you is that is just takes a little math.
The question is designed to get you to think about the problem within the constraints. There's always more than one way to do something.
|
|
|
|
|
Oh i see now, i thought there was a function that i had to use, instead of maths, but i get it now. Thank you.
|
|
|
|
|
There are clever ways to do this, and they are overkill.
You could use Tuple voodoo in C#7; you may have round-off errors with floating-point numbers, if you do some maths trickery.
Stand up in class and tell the instructor using a temp variable is the right thing !
Be sure and give your instructor the link to this story: [^]
cheers, Bill
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Dear fellow C# programmers.
I am trying to model a command that I will send to a product. The command payload consists of:
Header (byte)
Command (byte)
Length (byte)
Data (byte[])
Checksum (byte[2])
Now, the values for the header and command are always static for a particular function. The user only needs to change the data directly.
Indirectly, the Length and Checksum properties will change, but I have written methods which automatically calculate these upon any change of Data.
My idea is I can define a set of these commands as a template to accommodate all the different functions. The user can then use the commands, setting their own data as necessary.
When a user "uses" a command, I don't want them to change the Data property in the template commands. I want the user to create a clone of the command, such that when they change the Data property then these changes are only present in their local instance of the command.
I thought I understood that I could model the command as a struct, so that each command would be a "value type".
Then, when I do:
Command DestroyProduct = new Command(byte header, byte command, byte[] data);
...
...
Command LetOutMagicSmoke = new Command();
LetOutMagicSmoke = DestroyProduct;
LetOutMagicSmoke.Data = new byte[] {0x00, 0x01, etc};
Then the changes to Data are only present in LetOutMagicSmoke and not in DestroyProduct.
This is not how the code is behaving. Instead, changes made to LetOutMagicSmoke.Data are also made to the template command.
The only explanation I can think of is that since byte[] is a reference type, then when I say LetOutMagicSmoke = DestroyProduct; the byte arrays are copied by reference.
This is not the behaviour I want!
My next idea is to put some code in the 'getter' for the Command which iterates over the byte array, extracting out all the bytes, and then putting them into a new byte array, before returning the command to the user.
I haven't implemented that yet but I would like to get my understanding of this issue hashed out first.
Have I understood what is going on correctly? Is my next idea the best way forwards?
Many thanks.
|
|
|
|
|
Arrays of anything are always reference types, even if the base element is a value type. So when you copy the struct, you will copy the reference. Take a simple struct:
private struct MyStruct
{
public char X;
public int[] Ia;
public MyStruct(char x, int[] ia)
{
X = x;
Ia = ia;
}
}
MyStruct ms1 = new MyStruct('1', new int[1] {101});
MyStruct ms2 = ms1;
Console.WriteLine("{0}:{1}", ms1.X, ms1.Ia[0]);
Console.WriteLine("{0}:{1}", ms2.X, ms2.Ia[0]);
Understandably, you get:
1:101
1:101 But, they are independent from that point on:
MyStruct ms1 = new MyStruct('1', new int[1] {101});
MyStruct ms2 = ms1;
Console.WriteLine("{0}:{1}", ms1.X, ms1.Ia[0]);
Console.WriteLine("{0}:{1}", ms2.X, ms2.Ia[0]);
ms2.Ia = new int[1] { 202 };
Console.WriteLine("{0}:{1}", ms1.X, ms1.Ia[0]);
Console.WriteLine("{0}:{1}", ms2.X, ms2.Ia[0]);
Will give you
1:101
1:101
1:101
1:202 As you would expect.
But you can't expect the copy to create new reference objects becasue the new keyword is never used:
MyStruct ms1 = new MyStruct('1', new int[1] {101});
MyStruct ms2 = ms1;
Console.WriteLine("{0}:{1}", ms1.X, ms1.Ia[0]);
Console.WriteLine("{0}:{1}", ms2.X, ms2.Ia[0]);
ms2.Ia[0] = 202;
Console.WriteLine("{0}:{1}", ms1.X, ms1.Ia[0]);
Console.WriteLine("{0}:{1}", ms2.X, ms2.Ia[0]);
Will give you what you are seeing:
1:101
1:101
1:202
1:202 Because arrays are reference types and the struct copy will copy the reference to the array - which is exactly what it should do!
What you are looking for is a deep copy of the struct, which is not possible using "normal" operations - that's why structs should be immutable! Choosing Between Class and Struct | Microsoft Docs[^]
Quote: CONSIDER defining a struct instead of a class if instances of the type are small and commonly short-lived or are commonly embedded in other objects.
AVOID defining a struct unless the type has all of the following characteristics:
It logically represents a single value, similar to primitive types (int, double, etc.).
It has an instance size under 16 bytes.
It is immutable.
It will not have to be boxed frequently
This may help: Using struct and class - what's that all about?[^]
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|