2014-10-31 2 views
1

У меня есть файл undefinedable .dll для моего проекта. Это ни один документ не оставил , а исходный рабочий код находится в VB6. поэтому я стараюсь сделать код C# эквивалентным VB6 как можно более точно.Эквивалент строке * 10 из VB6 в C#

ПРОБЛЕМА

Я не знаю, как преобразовать следующий код C# ...

Dim ATQ As String * 10 
Dim Uid As String * 10 
Dim MultiTag As String * 10 

ПРИМЕЧАНИЕ

Q: некоторые пользователи спрашивают меня, что ты на самом деле требуется фиксированная длина строки?

A: Я уже пробовал string в C#, но нет данных об этих переменных. Итак, я думаю, что входная сигнатура для функции dllImport может быть неправильной. Итак, я хочу сделать это так же, как и VB6, потому что я точно не знаю, какая должна быть правильная подпись.

TRIAL & ОШИБКА

я попытался все это, но он никогда не работает (до сих пор нет обновления результатов для этих переменных)

Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString ATQ = new Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(10) 
Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString Uid = new Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(10) 
Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString MultiTag = new Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(10) 
+2

Мы не конвертер кода. – Raptor

+0

@Raptor О, так жаль, что –

+0

* 10 просто создает строку с фиксированной длиной, и я не думаю, что существует в C# (может быть, неправильно). Но вопрос больше: вам действительно нужна строка с фиксированной длиной? –

ответ

1
string ATQ; 
string Uid; 
string MultiTag; 

Отличие заключается в том, что в VB6, я что синтаксис String * 10 может создавать строки фиксированного размера. Если это так, то поведение заполнения может отличаться.

+0

Итак, вы имеете в виду, что это не имеет значения в C# ? –

+0

@JongzPuangput говорит, что разница может привести к некоторой разнице в выходе –

+0

Я имею в виду, что мы обычно не используем строки фиксированного размера в C#. Если размер строки не имеет значения, тогда вы в порядке. Я не помню, как VB6 обрабатывал отступы. Например, в 'Dim ATQ As String * 10', тогда' Let ATQ = "abc" ', является' ATQ' равным '' abc "'? В C# нет автоматического способа сделать это. –

3

Вы можете использовать Microsoft.VisualBasic.Compatibility:

using Microsoft.VisualBasic.Compatibility; 

var ATQ = new VB6.FixedLengthString(10); 
var Uid = new VB6.FixedLengthString(10); 
var MultiTag = new VB6.FixedLengthString(10); 

Но это помечено как obsolete and specifically not supported for 64-bit processes, поэтому написать свой собственный, который дублирует функциональность, которая укоротить по установке длинных значений и отступы вправо с пробелами для коротких значений. Он также устанавливает «неинициализированное» значение, как указано выше, в null.

Пример кода из LINQPad (который я не могу получить, чтобы позволить using Microsoft.VisualBasic.Compatibility я думаю, потому что считается устаревшей, но у меня нет никаких доказательств того, что):

var U = new Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(5); 
var S = new Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(5,"Test"); 
var L = new Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString(5,"Testing"); 
Func<string,string> p0=(s)=>"\""+s.Replace("\0","\\0")+"\""; 
p0(U.Value).Dump(); 
p0(S.Value).Dump(); 
p0(L.Value).Dump(); 
U.Value="Test"; 
p0(U.Value).Dump(); 
U.Value="Testing"; 
p0(U.Value).Dump(); 

, который имеет этот вывод:

"\ 0 \ 0 \ 0 \ 0 \ 0"
"Тест"
"Тести"
"Тест"
"Тести"

+0

Марк, прокладки с пробелами или с нулями? Мне сказали в комментарии ниже, что это нули. –

+0

@JohnSaunders Определенно пробелы. Он заполняет нулями только в приведенной выше ситуации, где значение все еще «неинициализировано». –

+0

Марк, возможно, вы могли бы добавить пример, демонстрирующий поведение дополнений? Фактически, некоторые примеры, показывающие, как использовать это, были бы хороши, в общем. Вы можете также упомянуть, что они не только «не поддерживаются для 64-битных процессов», но и будут давать предупреждения о компиляторе - они устарели. –