Вы не можете использовать вложенные функции или методы в качестве типов функций, так как они полагаются на доступность контекстной информации (стека или объекта, соответственно).Вам нужно будет использовать статическую или файловую функцию объема:
void displayEmptyWindow () {
return;
}
Display_callback display() {
return &displayEmptyWindow;
}
РЕДАКТИРОВАТЬ: Если вы используете D2, вы можете преобразовать строку в строку C с помощью кода, такого какследующее:
string str = "test string";
// add one for the required NUL terminator for C
char[] mutableString = new char[str.length + 1];
mutableString[] = str[];
mutableString[str.length] = '\0';
// and, finally, get a pointer to the contents of the array
char* cString = mutableString.ptr;
Если вы точно знаете, что вызываемая функция не изменит строку, вы можете немного упростить это:
someCFunction(cast(char*)toStringz(str));