2012-04-24 37 views
7

C++ uygulamasında, kullanıcı tanımlı verilerin hizalanmasını kontrol etmek için __declspec(align(#)) declarator'ı kullanabilirsiniz. Bunu C# için nasıl yapabilirim. Benim dll'de Assembler üzerine yazılmış iki prosedür var. Prosedürler için argümanlar (iki dizi) 16 bayt üzerinde hizalanmalıdır. C++ için çalışıyor. başardı için size arıyorsanızC# veri hizalamasını kontrol edin

Sadece kullanılan beyanlar

__declspec(align(16)) 
double a[2]={10.2,10.6}; 
+2

belki sen yerine ne yapmak istediğini bize söylemelidir (veya buna ek olarak) başka bir dilde yapacağını nasıl. – Servy

+4

@Servy: Açıkçası ben onun ne yapmak istediği konusunda oldukça açık olduğunu düşündüm; Farklı bir dilde örnek vermek normaldir. – NotMe

+0

@ChrisLively Yanlış değil, sadece yeterli düşünmüyorum. Yanıtları, diğer dilin işlevselliğine aşina olan kişilere sınırlandırırsınız. Doğrudan bir liman da diller arasında her zaman bir fikir değildir. Altta yatan problemin bilinmesi durumunda, dile daha uygun bir çözüm kullanılabilir. – Servy

cevap

8

size, birlikte çalışma (C# arasındaki veri aktarımı /. NET tabanlı ve C/C++/montajcı tabanlı yazılım) yönetilmeyen MSDN göre

[StructLayout(LayoutKind.Explicit, Pack = 16)] 
public class MyDataClass { 
    [FieldOffset(0)] 
    double[] a; 
} 

: StructLayout özelliğin bir arada ve FieldOffset niteliğini kullanmak

System.Runtime.InteropServices.StructLayoutAttribute.Pack alanı, bir hedef nesnenin veri alanlarının bellek hizalamasını belirler.

http://support.microsoft.com/kb/922785

+0

Cevabınız size yardımcı olduysa, lütfen doğru şekilde işaretleyin ... –

+0

Downvoter, yorum yapmak ister misiniz? –

İlgili konular