Trouble getting started with NxLib and Ensenso SDK, Assigning Cam Parameters

General Information

  • Product: e.g. C57-8-S
  • Serial Number: 244011
  • Ensenso SDK Version: 3.6.1617 (NxLib)
  • Operating System: Windows

Problem(s) / Question(s)

I have several starting problems with the Ensenso SDK/NxLib.
An interface connection with C# and the PartFinder is to be written.

  1. On the landing-page for DotNet I found the following Warning:

The Common Language Infrastructure (CLI) interface is deprecated since [EnsensoSDK](https://www.ensenso.com/download) 3.6 and will be deleted in a future version of the SDK.

I have integrated the current Nuget package (V3.6.1617). But it wants to load a local DLL “NxLib64” via the class “NxLibImport”.
In the directory: "…\Ensenso\development\examples\C#.…\bin\x64\Debug" I only found one DLL named “NxLib64CLIv4.0.dll”.
Is this the current or the obsolete version?

  1. Parameters of NxView - use in NxLib

I have saved the settings and parameters of the camera in NxView and tried to load them as follows:

string parametersJson = “(see attachments →
params_capture.json (7.6 KB)
)”;

new NxLibItem(NxLib.itmCameras)[“244011”][NxLib.itmParameters].SetJson(out errCode, parametersJson, true);

and also:

NxLibCommand open = new NxLibCommand(NxLib.cmdOpen);
open.Parameters()[NxLib.itmCameras].Set(“244011”);
open.Parameters()[NxLib.itmCameras][“244011”][NxLib.itmParameters].SetJson(out errCode, parametersJson, true);
open.Execute();

Unfortunately, I could not find/manage to run a concrete example in the documentation.

How, when and where do these have to be defined?

It turns out that only 4 FlexView images are taken and the flash is missing. (If camera “244011” is selected instead of “244011-Color”)
If I select “244011-Color”, I get 4 FlexView images and a flash, but the flash triggers before the FlexView projection is completed.

Do I have to open both cameras (“244011” + “244011-Color”) separately and execute one capture each?

  1. Differences in TreeView with NxView compared to C# NxLib access:

I’ve noticed, that some nodes, as visible in the screenshot, are only visible when NxView is running. When I access the camera via NxLib those Nodes are missing.
Are these relevant for the PartFinder and is it possible to fill them with other follow-up commands?

NxView verbunden:

NxLib Zugriff:

If you need more information, please don’t hesitate to reach out to me.
Thanks in Advance!

Max

Hello Max,

To 1.

This is the obsolete one. The NxLibImport class tries to load the NxLib64.dll, which should be found under C:\Windows\System32 after you installed the Ensenso SDK.

To 2.

After installing the nuget package you should see the nxSimple.cs example, which shows how to open and operate a camera.

You can set the camera parameters as follows:

// Assuming you have opened the camera before.
NxLibItem camera = new NxLibItem(NxLib.itmCameras)["244011"];

// Assuming you have a function for reading the json file.
string parametersJson = loadTextFile("params_capture.json");

// Write the /Cameras/244011/Parameters node.
camera[NxLib.itmParameters].SetJson(parametersJson);

For a C-Series camera you need to open both the stereo and the color camera together in case you want to combine their data.

NxLibCommand open = new NxLibCommand(NxLib.cmdOpen);
open.Parameters()[NxLib.itmCameras][0].Set("244011"); 
open.Parameters()[NxLib.itmCameras][1].Set("244011-Color"); 
open.Execute();

This guide provides additional information on the C-Series camera and links to a guide explaining how to combine stereo and color data.

To 3.

These nodes are only existing if the camera has been opened. Here is an example documentation of one of those nodes. Note that there is documentation for all of our nodes in case you are looking for further details.

I hope that helps getting you started. We are here for any further question.

Kind Regards
Benny

Hello Benny,

Thank you for all your Answers.

Now that I know that the other Version was the deprecated one, I will focus continueing with the recommended new Version and Nuget Package.

I found the NxLib64.dll in C:\Windows\System32 but the NxLibImport can’t seem to find it.
I tried to copy it to my local Debug folder, but then I get the following error:

System.BadImageFormatException
HResult=0x8007000B
Nachricht = Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)

To 3: I found this note in the Documentation:

This node is not present when the camera is closed or no calibration data was loaded.

I’ll try to also load the calibration once I get the NxLibImport working.

Regards,
Max

0x8007000B sounds like you mixed 32-bit and 64-bit executables/DLLs… is your executable 64-bit? Because we don’t ship NxLib as 32-bit binaries anymore.

best regards, Rainer

Hey Rainer,

changing to x64 only resolved the issue.

Now I have another Problem with the new dll - all my outputs from .AsJson() return some gibberish.

See my screenshot:

image

Any ideas how I can solve this problem?

Regards,
Max

Okay, that look’s interesting :wink: If you could post the code you ran, I can have a closer look.

Hey Benjamin,

here my testing code in C#:

try
{
	int errCode;

	while(true)
	{
		NxLibCommand open = new NxLibCommand(NxLib.cmdOpen);
		open.Parameters()[NxLib.itmCameras][0].Set("244011-Color");
		open.Parameters()[NxLib.itmCameras][1].Set("244011");
		open.Execute(out errCode, true);

		if (errCode == 0)
		{
			break;
		}
		else // Due to errors with the -Color cam not apperaering sometimes - for now just retry
		{
			var itmErrorSymbol = open.Result()[NxLib.itmErrorSymbol].AsString();
			var itmErrorText = open.Result()[NxLib.itmErrorText].AsString();
		}

		Thread.Sleep(100);
	}
	

	var camStereo = new NxLibItem(NxLib.itmCameras)[0];
	camStereo.SetJson(out errCode, JsonStuff.configJsonStereo, true);

	var camColor = new NxLibItem(NxLib.itmCameras)[1];
	camColor.SetJson(out errCode, JsonStuff.configJsonColor, true);

	var captureCmd = new NxLibCommand(NxLib.cmdCapture);
	captureCmd.Execute(out errCode, true);
	
	if (errCode > 0)
	{
		var itmErrorSymbol = captureCmd.Result()[NxLib.itmErrorSymbol].AsString();
		var itmErrorText = captureCmd.Result()[NxLib.itmErrorText].AsString();
	}

	var rectifyCmd = new NxLibCommand(NxLib.cmdRectifyImages);
	rectifyCmd.Execute(out errCode, true);

	if (errCode > 0)
	{
		var itmErrorSymbol = rectifyCmd.Result()[NxLib.itmErrorSymbol].AsString();
		var itmErrorText = rectifyCmd.Result()[NxLib.itmErrorText].AsString();
	}

	new NxLibCommand(NxLib.cmdComputeDisparityMap).Execute();
	new NxLibCommand(NxLib.cmdEstimateDisparitySettings).Execute();

	string generateModelParams = @"
		{
			""Angle"": 1.57079632679489656,
			""AngularResolution"": 0.31415926535897931,
			""Distance"": 915,
			""Filename"": ""C:\\Users\\pixel\\Desktop\\CE3PRO_endkappe_links.stl"",
			""Function"": ""GenerateModel"",
			""InPlaneAngularResolution"": 0.31415926535897931,
			""RelativeModelSamplingDistance"": 0.048,
			""Subsampling"": 1,
			""Texture"": false,
			""Viewpoints"": ""XNegative""
		}
		";

	NxLibCommand generateModel = new NxLibCommand(NxLib.cmdPartFinder);
	generateModel.Parameters().SetJson(generateModelParams, true);
	generateModel.Execute(out errCode, true);

	if (errCode > 0)
	{
		var itmErrorSymbol = generateModel.Result()[NxLib.itmErrorSymbol].AsString();
		var itmErrorText = generateModel.Result()[NxLib.itmErrorText].AsString();
	}


	int generatedModelId = generateModel.Result()[NxLib.itmModelId].AsInt();

	string findParamsJson = @"
		{
			""CUDA"": {
				""Enabled"": false
			},
			""Cluster"": {
				""Count"": 30,
				""MaximumClusterSize"": 10,
				""MinimumAspectRatio"": 0,
				""MinimumLeadingScore"": 0,
				""Scaling"": 0.5
			},
			""CombinedScore"": 0.84999999999999998,
			""CoverageDistanceThreshold"": 0,
			""DistanceRatio"": 1.19999999999999996,
			""Duplicate"": {
				""Scaling"": 0.5
			},
			""Function"": ""Find"",
			""Hypothesis"": {
				""Count"": 20000,
				""Score"": 0.69999999999999996
			},
			""MaximumSpreadOrder"": 3,
			""MinimumSpreadOrder"": 2,
			""ModelId"": 0,
			""RefineCombined"": {
				""Iterations"": 4
			},
			""Refinement"": {
				""Refine3D"": false
			}
		}";

	NxLibCommand find = new NxLibCommand(NxLib.cmdPartFinder);
	find.Parameters().SetJson(findParamsJson, false);
	find.Parameters()[NxLib.itmModelId].Set(generatedModelId);
	find.Execute(true);

	var findResults = find.Result()[NxLib.itmObjects];

	if (findResults.Count() > 0)
	{
		var findResultsJson = findResults.AsJson(true);
		var findResultsCnt= findResults.Count();
	}
}
catch (NxLibException exception)
{
	MessageBox.Show("An error occurred: " + exception.GetErrorText() + " ( " + exception.GetItemPath() + " )", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
catch
{
	MessageBox.Show("An unknown error occurred", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}

JSON Value of findResultsJson. Note that findResultsCnt has a value of 17.

ਜ਼笉ऊ∉潃敶慲敧㨢〠㤮㤴㘰㘱ㄹ㘷〱㘱㐸ⰶऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㘰㠴㤱㌳㤵㜳ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㜰㔹㠷㐰〲〳㌳㐴㌷ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㈠㐮㐰㜵㌰㈶ㄵ㤲㜷㘰ⰶऊउ∉硁獩㨢嬠ऊउउ⸰㜰㤴㠷〱㈸㈰㠷㐲㐰ਬउउ〉ㄮㄶ㜱㠴ㄹ㠸㤶㘳㌷ⰳऊउउ⸰㠹〴㌷㐶㌴㔵㈷ㄹ㌹ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㐲⸲㐶㔴㐴ㄷ㐹㔴㘰〵㐸ਬउउ㌹㌮㌱㔷㠵㤲㈰㐱㐷㐱ⰲऊउ㤉㄰㈮〳㜹㘵㔱㘴㌵㐵㘱਷उ崉ऊ紉ਬउ匢潣敲㨢〠㤮〶ㄲ㤰㠷㠹㠴㈳㘷ⰴऊ∉敔瑸牵≥›⸰㜹㐱ㄹㄲ㘷㌱㈲㈰㔱ਬउ嘢敩灷楯瑮湉敤≸›㠱㤴ऊⱽऊ੻उ䌢癯牥条≥›⸰㔹㐸㔴㄰㔲㤶㈴㐷ⰹऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㔰㜳ㄷ㜹㘲㘵㔲ਬउ䘢汩湥浡≥›䌢尺啜敳獲屜楰數屬䑜獥瑫灯屜䕃倳佒敟摮慫灰彥楬歮⹳瑳≬ਬउ䘢硩摥㨢琠畲ⱥऊ∉楌桧楴杮㨢笠ऊउ䌢汯牯㨢嬠ऊउ〉ㄮ㌲ㄱ㔲㤵ㄳ㔸㈴㠴ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㈠㈮㌰㈷㄰ㄲ㈵㜰㔳㜳ⰵऊउ∉硁獩㨢嬠ऊउउ⸰〰㠶㜳㜷㈱㌴㔷㌸㌲ਬउउⴉ⸰㠱㜲㐹㜸㐱㠵㠴㠴ㄳਬउउⴉ⸰㠹ㄳ㜲㤲㠵㌵㐸〵㈶ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㐱⸸㘸㐴㘳ㄴ㘲㈳㤸〸㔵ਬउउ㜱⸹㔴㌴㜳㘲ㄷ〰㠱ㄶ㈸ਬउउ㤸⸶㤴㈷㠹㤷ㄳㄱ㠷㌱㤷ऊउ੝उⱽऊ∉捓牯≥›⸰㌹㐸㌴㈷㌰〴㈷㜸ⰶऊ∉敔瑸牵≥›⸰ㄹ㠸㤵㈷㈰〳〱㔲㤳ਬउ嘢敩灷楯瑮湉敤≸›㠱㐴ऊⱽऊ੻उ䌢癯牥条≥›⸰㘹㈸㈳㌰㘵㘳〹㠱㔵ਬउ䌢癯牥条䑥獩慴据呥牨獥潨摬㨢ㄠ〮ㄹ㔸㤷〱㔱㈶ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㌱㈵〷ㄷ㜴㤵㈸㘶ⰶऊउㄉਬउउਰउ崉ऊ紉ਬउ䰢湩≫›੻उ∉湉敶獲≥›牴敵ਬउ∉潒慴楴湯㨢笠ऊउ∉湁汧≥›⸱〸㤶㤸㈰㜶㌸㜳㌸ⰶऊउ∉硁獩㨢嬠ऊउउ⸰㌰㌰㌱㤷ㄷ㈸㐳〳㈱ਬउउⴉ⸰㜱㤱㠸〶㤹ㄱ㘲㔵㈲ਬउउⴉ⸰㠹㘴㈳ㄴ㔴㤳㐱㘰㈳ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㠲⸵㌲〷㜸㌲ㄴ㤲〲㘵㘲ਬउउ㜭⸳㠵㠹ㄶ㈵㈱〵㠸㔱㠳ਬउउㄹ⸲㔵〵㌹㤶㈴㌵㐷㠱㜸ऊउ੝उⱽऊ∉捓牯≥›⸰㌹㌲㐶㐶㘲〲㠰㘶ⰷऊ∉敔瑸牵≥›⸰㤸㠷㔲㔹㌶㐴〶㐴㈹ਬउ嘢敩灷楯瑮湉敤≸›㜱㘰ऊⱽऊ੻उ䌢癯牥条≥›⸰㜹㤷〰㘵㘴〷㘵㜲㐴ਬउ䌢癯牥条䑥獩慴据呥牨獥潨摬㨢ㄠ〮㔶㐲㔶㈸㌰㈱ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㔱㐳㤰㠴〱㠴㠵㤳㐸ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢ㄠ㈮㄰㌹㐴〷㜸㠱㜲㘳ⰵऊउ∉硁獩㨢嬠ऊउउ⸰㤰㘷㐳㐰㘴㤸㤷㔷㐱ਬउउⴉ⸰㤱㤵㔳㘳㐴㜸㜱㘳㌶ਬउउⴉ⸰㜹㜵㐴㤲㐳ㄸ㈰㐷㔲ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㠳⸷㈳㤹㜹㈶㘷㘰㠵㘷㔸ਬउउ㠶㔮㤴㌵㘵ㄸ㐸㜲㈱㈶ਬउउ〹⸱ㄲ〴ㄶ㌳ㄸ㌷㔴〱㜷ऊउ੝उⱽऊ∉捓牯≥›⸰㈹㈳㔹㔲㐹㔷〷〸㠰ਬउ吢硥畴敲㨢〠㠮ㄷ㌷〹㤲㠸㌴㠳㜳ⰹऊ∉楖睥潰湩䥴摮硥㨢ㄠ〷਴紉ਬ笉ऊ∉潃敶慲敧㨢〠㤮㔷〰〰㌲㐸㠱㜵ㄹਬउ䌢癯牥条䑥獩慴据呥牨獥潨摬㨢ㄠ〮㘷㐸㈳ㄶㄷ㜸ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㘱㐰㈸㐶〵㐳㤷〰㤳ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢〠ㄮ㔸㘵㔸㔶㌳㔲㜴㠴ਬउउ䄢楸≳›ਜ਼उउ〉㤮㜵〴㠰㔹〰㈴㜱〱ⰱऊउउ〭㈮〷㤷㜵㌰㠱㜳㈹㤵ⰱऊउउ〭ㄮ〰㘲㜵㌱㤸㈲㔳ㄱਲउउ੝उ紉ਬउ∉慔杲瑥㨢∠Ⱒऊउ吢慲獮慬楴湯㨢嬠ऊउ㈉㤷㤮〰㔲㈷㘲㘴㤶㤱㐷ⰷऊउ㈉⸰ㄴ㠳㘳ㄳ㌴㐲ㄷ㐵ⰶऊउ㤉㘰〮㘱㈵㠰㤰㘱㜷㘸㘸ਵउ崉ऊ紉ਬउ匢潣敲㨢〠㤮㤱㔷㘸㜷㠴㘲㐰㠹ਬउ吢硥畴敲㨢〠㠮㜶㐶ㄷㄷ㈰㔰㜰ㄸⰲऊ∉楖睥潰湩䥴摮硥㨢ㄠ〸਱紉ਬ笉ऊ∉潃敶慲敧㨢〠㤮㔶㐱㐷㔳㘶ㄵ〳ㄶⰵऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㠰㔱㈴㘹㜸ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㠱㔰〸ㄶ㤵㜹ㄳ㐴㌵ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㈠ㄮ㠳ㄷㄷ〱ㄸ㘷㌹㠸ⰹऊउ∉硁獩㨢嬠ऊउउ⸰㠰㤹〴㈹ㄵ㜲㤳㔰㐳ਬउउ〉ㄮ〶㠵㔷㤵㠳㜲〰㠵ⰴऊउउ⸰㠹㤲㔱㠱㐷㤶㜷㤱㈱ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㐳⸹〸ㄳ㐰㔶㔴㌵〴ㄸ㈸ਬउउ㈭⸳㐹㘷㐷㐲㐵ㄳ㠶㌱㠲ਬउउ〹⸸㈳㘴㠹㜶㠲㠶㐷㠸㈷ऊउ੝उⱽऊ∉捓牯≥›⸰〹㜹㤰㤶〲㄰㐳㜲㌷ਬउ吢硥畴敲㨢〠㠮㜵㔴㈶㜰㜲㌵〹㈶ⰵऊ∉楖睥潰湩䥴摮硥㨢ㄠ㔸ਰ紉ਬ笉ऊ∉潃敶慲敧㨢〠㤮㈳㜹㠵㠸㔲㈲㠵〳ⰱऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㠰㐰㐴㌳㤵㜳ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㤱㜹㤵㘹㄰㐷㘵㔰㜴ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢ㄠ㌮㔹㠸ㄲㄱ㜶㈷㜰㐵ⰹऊउ∉硁獩㨢嬠ऊउउ⸰㘱㐰㐸㈰〵㤵㜲㌱㈱ਬउउ〉ㄮㄱ〴㌵㤷㠹㤷ㄹ㘱ਬउउ〉㤮〸㌷㈱㘱㤴㌶㠹㈸ਸउउ੝उ紉ਬउ∉慔杲瑥㨢∠Ⱒऊउ吢慲獮慬楴湯㨢嬠ऊउ㈉㜱㘮㈰㤰㤲㌲㌴㠰㠸㔰ਬउउㄱ㤮㤰㜲㠰㌷ㄳ㈶㠶㌴ⰵऊउ㤉㜰㘮㠶㐴㌳㤸㘰㄰㐴ऊउ੝उⱽऊ∉捓牯≥›⸰〹㄰〲㄰㤹㈱ㄷ㜹㜲ਬउ吢硥畴敲㨢〠㠮㠶㈴〱㜷㈷㈸ㄷ㠴ⰴऊ∉楖睥潰湩䥴摮硥㨢ㄠ㔸ਲ紉ਬ笉ऊ∉潃敶慲敧㨢〠㤮㜳㤸㜴ㄶ㘵㌲㜴ㄴⰲऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㜰〰㜰㈳㈴㠱㔷ਬउ䘢汩湥浡≥›䌢尺啜敳獲屜楰數屬䑜獥瑫灯屜䕃倳佒敟摮慫灰彥楬歮⹳瑳≬ਬउ䘢硩摥㨢琠畲ⱥऊ∉楌桧楴杮㨢笠ऊउ䌢汯牯㨢嬠ऊउ〉㈮㔰㜷㄰㐳㈹㠵㈴㠲ⰵऊउㄉਬउउਰउ崉ऊ紉ਬउ䰢湩≫›੻उ∉湉敶獲≥›牴敵ਬउ∉潒慴楴湯㨢笠ऊउ∉湁汧≥›⸰㤳㔶㌲ㄹ㤲〳〱㠰㐶ਬउउ䄢楸≳›ਜ਼उउⴉ⸰㔳㠱㜳㄰ㄳ㐱㜸〴㘸ਬउउⴉ⸰㤶㈳㤴㈹㈸㔵㌴㌴ਬउउⴉ⸰㈶㤸㤷㌵ㄳ㌹㐴㤰㤰ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㜱⸵㐸㠳㜱㐶㜹㈹㈵㤶㘳ਬउउ㈸㔮〹㤴〹㐲㜵㘵㜷㈸ⰲऊउ㤉㌰㌮㌸ㄲ㘰㈵㐶㈸㐴㌸ਲउ崉ऊ紉ਬउ匢潣敲㨢〠㠮㜹ㄱ㤴㈳㌵〷㠷㔸ⰷऊ∉敔瑸牵≥›⸰㔸ㄸ㠰㘱㠲㤷㐹㠳㠴ਬउ嘢敩灷楯瑮湉敤≸›㜱㐴ऊⱽऊ੻उ䌢癯牥条≥›⸰ㄹ〲㜷〳㜷㄰ㄱ㠰ⰴऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㜰ㄲ㌴㔵㘴㜸ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰ㄲ㌳㜰㤴㠹㔸㔵〹㈸ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㈠㤮㤲㌳㜴㠰㘳㤷㔱㘷ⰳऊउ∉硁獩㨢嬠ऊउउ〭㈮㐴㌸㈵〷㐶㌰㠴ㄲⰳऊउउ〭㤮㤶㔵㘶〶〳㈲㐵㔹ⰸऊउउ⸰〰㤳㘴㈲㠷㤱㌷ㄷ㤱ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ〵〮㈳㔷㌴㠰㐸㤴㐱〷ⰴऊउ㤉⸱㐹㈲〰㤰〸㄰㈲㠲ㄴਬउउ㈹⸱㔳㘴㌵㠴㜵〷㠰㈶㌶ऊउ੝उⱽऊ∉捓牯≥›⸰㤸㌳㘴㔲〰㜵㈲㐰㤵ਬउ吢硥畴敲㨢〠㠮㐷㤹㠹〸㤷㜰〱㐴ⰹऊ∉楖睥潰湩䥴摮硥㨢㔠ਰ紉ਬ笉ऊ∉潃敶慲敧㨢〠㠮㐹㤳㔶㌴〵㠲㜰ㄶⰷऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㔰㘵㐶㘰㔲ਬउ䘢汩湥浡≥›䌢尺啜敳獲屜楰數屬䑜獥瑫灯屜䕃倳佒敟摮慫灰彥楬歮⹳瑳≬ਬउ䘢硩摥㨢琠畲ⱥऊ∉楌桧楴杮㨢笠ऊउ䌢汯牯㨢嬠ऊउ〉㈮㐳㤷㌱㠹㐰㐸〰㜸ⰹऊउㄉਬउउਰउ崉ऊ紉ਬउ䰢湩≫›੻उ∉湉敶獲≥›牴敵ਬउ∉潒慴楴湯㨢笠ऊउ∉湁汧≥›⸳㈰㠱㌳㈶㤳㜷㈰㌷㈷ਬउउ䄢楸≳›ਜ਼उउⴉ⸰㘶㈵㤴㠹㐳㘹㈲㔱㌵ਬउउⴉ⸰㐷ㄶ㘴㈴㔵㌷㌲㠸㜴ਬउउⴉ⸰㈰㘶㜰㈷㘵㜱㜸〳㜵ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㈳⸳㐴ㄴ㠳〱㠶㈹㠱㠲㔰ਬउउ㈱⸴㔹㈵㜵㌹㤱㐱㐷〴㌶ਬउउㄹ⸴㈴〷㜰㘱ㄵ㘳㘱㐰㠳ऊउ੝उⱽऊ∉捓牯≥›⸰㠸㘲㐰〳㤰㔷㤷㔹ㄶਬउ吢硥畴敲㨢〠㠮〷㘹㘷㘲㜵㘱㔵㜲ⰳऊ∉楖睥潰湩䥴摮硥㨢ㄠਸ਼紉ਬ笉ऊ∉潃敶慲敧㨢〠㤮㌰ㄳ㠴㠸㜴㌷㔲㌴ⰹऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㘰ㄸ㘷㘲㔹ㄳ㔲ਬउ䘢汩湥浡≥›䌢尺啜敳獲屜楰數屬䑜獥瑫灯屜䕃倳佒敟摮慫灰彥楬歮⹳瑳≬ਬउ䘢硩摥㨢琠畲ⱥऊ∉楌桧楴杮㨢笠ऊउ䌢汯牯㨢嬠ऊउ〉㈮ㄵ㠹㠳〸㤹㜶㐰〱ⰲऊउㄉਬउउਰउ崉ऊ紉ਬउ䰢湩≫›੻उ∉湉敶獲≥›牴敵ਬउ∉潒慴楴湯㨢笠ऊउ∉湁汧≥›⸰㐹㠶㌹〵㤳㈳〳㔱㤳ਬउउ䄢楸≳›ਜ਼उउ〉㈮㌳〴〱㤹㘰㜸〵㔲ⰶऊउउ〭㈮㌴㜷㘶㌷〶㐲㔴㔷ⰹऊउउ〭㤮ㄴ㈳ㄷ〸㤲㌴㐰ㄵ਱उउ੝उ紉ਬउ∉慔杲瑥㨢∠Ⱒऊउ吢慲獮慬楴湯㨢嬠ऊउ㌉㈴㔮〳㠳㌰㈳㐰㜹㜸㌷ⰹऊउ㔉⸳㘶㤲㘵㠱ㄹ㌳㤱㐷㜲ਬउउ〹⸲〶ㄵㄳ㔰㔷㘰㠵㘲㈹ऊउ੝उⱽऊ∉捓牯≥›⸰㜸〴㠰㔰㔹㄰㐶㤷㤴ਬउ吢硥畴敲㨢〠㠮㔴㔶ㄲ㌰㈴〴㈷㘲ⰶऊ∉楖睥潰湩䥴摮硥㨢ㄠ〷ਲ਼紉ਬ笉ऊ∉潃敶慲敧㨢〠㤮㐳㔹㌹㈵㄰㐶㠴㜹ⰵऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㜰〵㌷㐲ㄲ㜸ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㔲㌹ㄲ〸㠸㔱〰㐲ㄴਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㌠〮㔱㌹㤴㈴㤹㐷㠲㔲ⰹऊउ∉硁獩㨢嬠ऊउउ⸰㘹〲㔶㤵㌱㔳㔳㠸ⰵऊउउ〭㈮㌵〰㄰㘸㜰㤴㌷㘲ⰶऊउउ⸰〱〲ㄸ㐸㘸㐰〸㐹ㄴऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㤳⸲㜸〱㜲㤴㈳〳㠰㘷㜵ਬउउ㐭㐮㘸㔱㈵〶㤷㠷㜶㘸ⰱऊउ㤉㈲㔮㘴㠶㤹㐲㜶ㄷ㤳㘰਱उ崉ऊ紉ਬउ匢潣敲㨢〠㠮〷㌳〹㔹㤵㐲㠹㜷ⰹऊ∉敔瑸牵≥›⸰ㄸ㄰㔸㤱〴㔱〵㤲ⰳऊ∉楖睥潰湩䥴摮硥㨢ㄠ㘹ऊⱽऊ੻उ䌢癯牥条≥›⸰㠸㔸㔷㌴㘴㐸㔷㐳㠱ਬउ䌢癯牥条䑥獩慴据呥牨獥潨摬㨢ㄠ〮㘵㌳㐵㤴ㄲ㜸ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㘲㤰㔵㈹㜹㘵㘱㔴ㄵਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㈠㤮〴㠷〴㤱㜰㠷㌷㤷ਬउउ䄢楸≳›ਜ਼उउ〉〮ㄳ㜸㐱㈹㤹〰㜰㤸ⰶऊउउ⸰㌱㘹㘴㌰㘹㔴㐶㠲㐴ਬउउ〉㤮㤸㠶㐸ㄳ㔵㤰㠹〵਴उउ੝उ紉ਬउ∉慔杲瑥㨢∠Ⱒऊउ吢慲獮慬楴湯㨢嬠ऊउㄉ㔰㔮ㄱ㐲㜶㘸㐵㔱㈶ㄴⰵऊउㄉ㔷㔮ㄸㄵ㐸㌵㠵㜱㌹㌴ⰷऊउ㠉㜹㐮㔷〱ㄹ㜵㜴㈵〳㔸ਹउ崉ऊ紉ਬउ匢潣敲㨢〠㠮㤶㈵〲㔳㈱㤱㜱㈷ⰵऊ∉敔瑸牵≥›⸰㔸㠰㜷㘱㜵㐹㜳㔲㤵ਬउ嘢敩灷楯瑮湉敤≸›㠱〲ऊⱽऊ੻उ䌢癯牥条≥›⸰㔹㘱㈳㠳㐰㔸㌵㘴㠶ਬउ䌢癯牥条䑥獩慴据呥牨獥潨摬㨢ㄠ〮㜴㈴㌴㘱〴㈶ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㘲㌸〱㈴㘷㔶ㄷ㐰㤴ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢〠㘮㘲〳㠸〰㘴㠸㔴ㄵⰷऊउ∉硁獩㨢嬠ऊउउ〭㐮㜸㜱㈰㈵〵㌹ㄲ㈷ⰲऊउउ〭㜮㈳㔸ㄴ㜹㠷〹㠹㌴ⰸऊउउ⸰㜴㤴㌶㄰㐹㠵㔲〳㌳ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउㄳ⸴㜵㘳㈹㐶㤷㐴㐱㈲㤰ਬउउ㠱⸷㘷ㄲㄲ㤱〷〲㘴㘲ⰶऊउ㠉㐹㔮㐹㔹㈵㈳㠸㘰㌹㜰ਵउ崉ऊ紉ਬउ匢潣敲㨢〠㠮㔶㐸㜴㘸㘱ㄷ㐴㜷ⰵऊ∉敔瑸牵≥›⸰㠷㜷〹㔶〶㤸㠷㜲㔱ਬउ嘢敩灷楯瑮湉敤≸›㔱㔴ऊⱽऊ੻उ䌢癯牥条≥›⸰㤸㤴㈷㠰㤵㈵㔷㜸㤸ਬउ䌢癯牥条䑥獩慴据呥牨獥潨摬㨢ㄠ〮㐷㌰㘵㐴㌵㈱ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㜲㜸〶ㄳ㤳㜸㌷㤱㐳ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢〠㐮㤶㐰〰㠷㌲㐶㈰㔲ⰸऊउ∉硁獩㨢嬠ऊउउ〭㘮㘸㈲㐱ㄹ㤷㔶㔵㈲ⰷऊउउ〭〮㌱〴㔶㐴㈲㤹㐵ㄱⰲऊउउ〭㜮㜲㘲〹㤸㔶㐵㘸㘸਷उउ੝उ紉ਬउ∉慔杲瑥㨢∠Ⱒऊउ吢慲獮慬楴湯㨢嬠ऊउ㌉㐱〮〵㄰㌱㜴㐱㐵㐱㈲ਬउउ㜲ㄮㄷㄳ〴㌰㐵㘸㐳㈰ਬउउ〹⸵㈱㤵㜴㤰ㄳ㜲㜴〹㌹ऊउ੝उⱽऊ∉捓牯≥›⸰㘸㘰㤱㐸〳㘰㌱〴㌳ਬउ吢硥畴敲㨢〠㠮㜲㠵ㄶ㐷㄰㈱〳㘴ⰹऊ∉楖睥潰湩䥴摮硥㨢ㄠ㠷਷紉ਬ笉ऊ∉潃敶慲敧㨢〠㠮㐲㠲㌹ㄸ〵〴㠵㌸ⰸऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㜰㠲㔷㜹㔶㈶ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㠲㌹㠷㘱ㄶ㠹㌷㐰㤶ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢〠㤮㌲ㄹ㘱ㄶ㜸㤴㐲㌲ⰹऊउ∉硁獩㨢嬠ऊउउ〭㌮㐲ㄲ㐷㤷㔴㜴㠹ㄱⰹऊउउ〭〮ㄳ㤶㌵㠹㐸㘱㄰㌷ⰲऊउउ⸰㐹㐵ㄵ㐴㈱ㄲ㌷㔱㘲ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउ㜳⸲㐵㤳㠵㔴㌷㌸㤸㈴㘵ਬउउㄱ〮㔰㤴㠰㤴㐳ㄷㄸ㈰ⰶऊउ㤉㐰㔮〵㘵ㄶ㤸㜱㘶㘰ㄷਲ਼उ崉ऊ紉ਬउ匢潣敲㨢〠㠮㔵ㄳ㤰㘱〹㘰㐳㘷ⰶऊ∉敔瑸牵≥›⸰㠸㐷㤹㈹㐸㐷㈴㈶ⰷऊ∉楖睥潰湩䥴摮硥㨢ㄠ㘶਷紉ਬ笉ऊ∉潃敶慲敧㨢〠㠮㔶㈲㌶㠲㜳㤲㔵㈳ⰲऊ∉潃敶慲敧楄瑳湡散桔敲桳汯≤›⸱㜰㜱㜷㐳㜳ⰵऊ∉楆敬慮敭㨢∠㩃屜獕牥屳灜硩汥屜敄歳潴屰䍜㍅剐彏湥此灡数江湩獫献汴Ⱒऊ∉楆數≤›牴敵ਬउ䰢杩瑨湩≧›੻उ∉潃潬≲›ਜ਼उउ⸰㤲〴㜳ㄸ㤸㠰㤶㐱㘰ਬउउⰱऊउ〉ऊउ੝उⱽऊ∉楌歮㨢笠ऊउ䤢癮牥敳㨢琠畲ⱥऊउ刢瑯瑡潩≮›੻उउ䄢杮敬㨢㈠㔮㠶〳㜳㌸〸㤰㠲㌸ਬउउ䄢楸≳›ਜ਼उउⴉ⸰㘶㈳㤳㔵㌴㄰ㄲ〲㐶ਬउउⴉ⸰ㄷ㤹〹㈶㔸㐱ㄸ㌶㈲ਬउउⴉ⸰〲㈴ㄷ㔳㠹㔶㜱㤸㜹ऊउ崉ऊउⱽऊउ吢牡敧≴›∢ਬउ∉牔湡汳瑡潩≮›ਜ਼उउㄱ⸴㐰ㄲ㘹㔴㐷㐷㐸㌴ㄵਬउउ⸵〷㈰㔳㐸㘱㐲㈹㠲㘰ਬउउㄹ⸹㤲㠷㜶㜳㠶㠱㔶ㄸ㠵ऊउ੝उⱽऊ∉捓牯≥›⸰㔸㤲ㄸ㤰㔰㔴㔶㈴㜹ਬउ吢硥畴敲㨢〠㠮〴〹ㄹ㌲㈴㜰㔱㌳ⰲऊ∉楖睥潰湩䥴摮硥㨢㈠ㄵऊ੽]

This looks like an encoding related bug in our interface. We will try to fix it as soon as possible.

For now you could try to fix it yourself. My guess is that changing Marshal.PtrToStringAuto to Marshal.PtrToStringAnsi in line 573 of NxLibItem.cs will fix the problem.

Does the AsString() method work as expected?

Hey Benjamin,

i changed the Code in the NxLibItem to Marshal.PtrToStringAnsi(…). That solved the issue. Thanks!

The AsString Method works properly.